Hi,
I''m working on my User model, which derives from Party, and parties
have
many e-mail addresses, telephones, and mailing addresses. When I save
the user model, the validations occur, but the child error messages
appear to be summarized. I expected the child errors to be listed in
detail, as in "Put in the address, dummy". Instead, rails returns
"Emails is invalid", or "Addresses is Invalid" for the
message.
In irb, I see that there are some interesting methods for the user
object:
validate_associated_records_for_emails
validate_associated_records_for_addresses
validate_associated_records_for_phones
They appear to add the child messages to the @errors object of the user
model, but they don''t seem to be called by @user.save!
Also, I tried adding the following to the view, it didn''t appear to
help:
<%= error_messages_for :address %>
<%= error_messages_for :email %>
<%= error_messages_for :phone %>
What is the rails way to force the display of the child errors? Or
perhaps more appropriately, what is the correct way to handle validation
when working with parent and child records on the same form.
Thank you!
app/models/party.rb
class Party < ActiveRecord::Base
has_many :addresses
has_many :emails
has_many :phones
end
app/models/user.rb
Class User < Party
end
app/models/email.rb
class Email < ActiveRecord::Base
belongs_to :party
validates_presence_of :address, "Put in the address, dummy"
end
app/controllers/account_controller.rb
def signup
@user = User.new
@user.emails << Email.new
@user.phones << Phone.new
@user.addresses << Address.new
end
def signup_post
@user = User.new(params[:user])
params[:email].each {|e| @user.emails << Email.new(e)}
params[:address].each {|a| @user.addresses << Address.new(a)}
params[:phone].each {|t| @user.phones << Phone.new(t)}
@user.save!
flash[:notice] = "Thanks for signing up!"
rescue ActiveRecord::RecordInvalid
render :action => ''signup''
end
Regards,
Rich
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Ruby on Rails: Talk" group.
To post to this group, send email to
rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org
To unsubscribe from this group, send email to
rubyonrails-talk-unsubscribe@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/rubyonrails-talk?hl=en
-~----------~----~----~----~------~----~------~--~---
Duzenbury, Rich wrote:> I''m working on my User model, which derives from Party, and parties have > many e-mail addresses, telephones, and mailing addresses. When I save > the user model, the validations occur, but the child error messages > appear to be summarized. I expected the child errors to be listed in > detail, as in "Put in the address, dummy". Instead, rails returns > "Emails is invalid", or "Addresses is Invalid" for the message. > > In irb, I see that there are some interesting methods for the user > object: > validate_associated_records_for_emails > validate_associated_records_for_addresses > validate_associated_records_for_phones > > They appear to add the child messages to the @errors object of the user > model, but they don''t seem to be called by @user.save!Those built-in child validations will only be done for new children, not for child updates. Use a validates_associated declaration to fully control when child validity is checked. You can then turn off the automatic validation by removing or emptying the above methods.> Also, I tried adding the following to the view, it didn''t appear to > help: > <%= error_messages_for :address %> > <%= error_messages_for :email %> > <%= error_messages_for :phone %> > > What is the rails way to force the display of the child errors? Or > perhaps more appropriately, what is the correct way to handle validation > when working with parent and child records on the same form.The most simple way to display all the errors: <% for assn in [:addresses, :emails, :phones] for @obj in @user.send(assn) %> <%= error_messages_for :obj %> <% end end %> -- We develop, watch us RoR, in numbers too big to ignore. --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "Ruby on Rails: Talk" group. To post to this group, send email to rubyonrails-talk-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org To unsubscribe from this group, send email to rubyonrails-talk-unsubscribe-/JYPxA39Uh5TLH3MbocFFw@public.gmane.org For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en -~----------~----~----~----~------~----~------~--~---