<% 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 -~----------~----~----~----~------~----~------~--~---