<% form_for (:contact,:url=>{:controller=>''contact'',:action => ''update'',:id => @contact},:html=> {:onSubmit => ''return validate()'', :id => ''savecontact''} ) do -%> . . . . <table cellpadding="4" cellspacing="0" border="1" width="100%" class="details"> <tr> <th colspan="4" align="left" bgcolor="#797ba8"><strong><font color="fffff">Email Addresses</font></strong></th> </tr> <tr> <% for email in @contact.emails %> <% fields_for "contact[email_attributes][]", email do |e| %> <td nowrap class="formLabel">Email </td> <td > <%= e.select (''email_type'',%w{Business Personal}, :include_blank => false) %> <%= e.text_field :email,:size=>"35",:maxlength=>"80" %> <%= e.radio_button (''isprimary'', ''1'') %>Primary </td> </tr> <% end %> <% end %></table> . . is my view page and here is my update function in contact_cotroller.rb def update @contact = Contact.find(params[:id]) if @contact.update_attributes!(params[:contact]) flash[:notice] = "The contact has been updated successfully." redirect_to :action => ''view'', :id => @contact else render :action => ''edit'' end end is throwing the following error can''t convert String into Integer RAILS_ROOT: E:/ruby1/Ruby/BCMS Application Trace | Framework Trace | Full Trace app/models/contact.rb:11:in `[]'' app/models/contact.rb:11:in `email_attributes='' app/models/contact.rb:10:in `each'' app/models/contact.rb:10:in `email_attributes='' app/controllers/contact_controller.rb:59:in `update Where am i going wrong..?? and my contact.rb is class Contact < ActiveRecord::Base belongs_to :company, :counter_cache => false has_many :users has_many :addresses has_many :emails has_many :phones validates_presence_of :namefirst, :namelast,:message=>''Database Validation Error from Contact'' def email_attributes=(email_attributes) email_attributes.each do |attributes| emails.build(attributes) unless attributes["email"].empty? end end plz help -- Posted via http://www.ruby-forum.com/. --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---
Daniel Bush
2008-Nov-17 12:42 UTC
Re: can''t convert String into Integer error on updating
Hi, Just a guess... On Nov 17, 7:57 pm, Raji Mani <rails-mailing-l...-ARtvInVfO7ksV2N9l4h3zg@public.gmane.org> wrote:> <% form_for (:contact,:url=>{:controller=>''contact'',:action => > ''update'',:id => @contact},:html=> {:onSubmit => ''return validate()'', :id > => ''savecontact''} ) do -%> > . > . > . > . > <table cellpadding="4" cellspacing="0" border="1" width="100%" > class="details"> > <tr> <th colspan="4" align="left" bgcolor="#797ba8"><strong><font > color="fffff">Email Addresses</font></strong></th> > </tr> <tr> > <% for email in @contact.emails %> > <% fields_for "contact[email_attributes][]", email do |e| %>So this will generate params[:contact][:email_attributes][<email_id>][<email_field>] => <field value in form> Each element in this params is a hash. Check your server logs to verify that that is what you''re getting.> <td nowrap class="formLabel">Email </td> > <td > <%= e.select (''email_type'',%w{Business Personal}, > :include_blank => false) %> > <%= e.text_field :email,:size=>"35",:maxlength=>"80" %> > <%= e.radio_button (''isprimary'', ''1'') %>Primary > </td> > </tr> <% end %> <% end %></table> > . > . > is my view page and here is my update function in contact_cotroller.rb > > def update > @contact = Contact.find(params[:id]) > if @contact.update_attributes!(params[:contact]) > flash[:notice] = "The contact has been updated successfully." > redirect_to :action => ''view'', :id => @contact > else > render :action => ''edit'' > end > end > is throwing the following error > can''t convert String into Integer > > RAILS_ROOT: E:/ruby1/Ruby/BCMS > Application Trace | Framework Trace | Full Trace > > app/models/contact.rb:11:in `[]'' > app/models/contact.rb:11:in `email_attributes='' > app/models/contact.rb:10:in `each'' > app/models/contact.rb:10:in `email_attributes='' > app/controllers/contact_controller.rb:59:in `update > > Where am i going wrong..?? > > and my contact.rb is class Contact < ActiveRecord::Base > belongs_to :company, :counter_cache => false > has_many :users > has_many :addresses > has_many :emails > has_many :phones > validates_presence_of :namefirst, :namelast,:message=>''Database > Validation Error from Contact'' > > def email_attributes=(email_attributes) > email_attributes.each do |attributes|email_attributes is a hash with keys being email id''s pointing to email attributes. See previous note above. When you do email_attributes.each |attributes| , ''attributes'' will be an array with the first value being the key and the 2nd element being the value.> emails.build(attributes) unless attributes["email"].empty?Calling attributes["email"] would trigger the above conversion error because arrays expect numeric indexes.> end > end >Also, I noticed you''re saying ":id => @contact" . I would have though @contact.id but might be missing something. -- Daniel Bush --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---