oreng
1
I try to update a nested model (version) and get this error. any tips
would be great!
my models: location has_many :versions
view
<% form_for location do |location_form| %>
- <%= location_form.label location.section %>
- <%= location_form.label location.sub_section %>
- <%= location_form.label location.place_holder %>
<div class="content-area">
<% location.versions.each do |version| %>
<div class="content" >
<% location_form.fields_for version do |version_form| %>
<%= version_form.label version.environment %>
<%= version_form.text_area :content %>
<% end %>
</div>
<% end %>
<%= submit_tag %>
</div>
<% end %>
#controller
def update
@location = Location.find(params[:id])
@location.update_attributes(params[:location]) #error: unknown
attribute: version
redirect_to( locations_path )
end
the params
{“location”=>{“version”=>{“content”=>“hello human. glass robot want
you to join Glass”}}, “commit”=>“Save changes”,
“authenticity_token”=>“l59NxAeIeHnvaVt+1xQV2e9NpDIS8nPpQ4RY+hU0k7w=”,
“id”=>“2”}
oreng
2
Where’s the error message?
oreng
3
ActiveRecord::UnknownAttributeError in LocationsController#update
unknown attribute: version
RAILS_ROOT: /home/oren/misc/projects/borderstylo/content
/opt/ruby-1.8.7-p72/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/
active_record/base.rb:2746:in attributes=' /opt/ruby-1.8.7-p72/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/ active_record/base.rb:2742:in
each’
/opt/ruby-1.8.7-p72/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/
active_record/base.rb:2742:in attributes=' /opt/ruby-1.8.7-p72/lib/ruby/gems/1.8/gems/activerecord-2.3.5/lib/ active_record/base.rb:2628:in
update_attributes’
/home/oren/misc/projects/borderstylo/content/app/controllers/
locations_controller.rb:29:in `update’
oreng
4
Hi Oren,
Try this “accepts_nested_attributes_for :versions” in the location.rb
file.
Cheers!
oreng
5
I already have this:
has_many :versions, :dependent => :destroy
accepts_nested_attributes_for :versions
oreng
6
This is how I did my nested forms (actually I have 3 forms nested):
<% form_for [@resource, @validity] do |f| %>
<% f.fields_for :timesheets do |t| %>
<% t.fields_for :values do |v| %>
R$ <%= v.text_field :value, :maxlength=>10 %>
<% end %>
<% end %>
<%= f.submit “Save” %>
<% end %>
resource has_many validities
validity has_many timesheets
timesheet has_many values
oreng
7
I use version and not :vorsion here: (since i believe i need to
provide an object)
location_form.fields_for version do |version_form|
could it be related to the issue?
oreng
8
It works now. I had 2 loops and had to remove the external one:
<% location.versions.each do |version| %>
fields_for already create a loop on the children, so there is no need
for another loop.
thanks!