unknown attribute: version (nested forms)

40 views
Skip to first unread message

oren

unread,
Apr 6, 2010, 9:49:55 PM4/6/10
to Ruby on Rails: Talk
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| %>
<ul class="location">
<li><%= location_form.label location.section %></li>
<li><%= location_form.label location.sub_section %></li>
<li><%= location_form.label location.place_holder %></li>
</ul>

<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"}

Ryan Waldron

unread,
Apr 6, 2010, 11:31:25 PM4/6/10
to rubyonra...@googlegroups.com
Where's the error message?

> --
> 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 rubyonra...@googlegroups.com.
> To unsubscribe from this group, send email to rubyonrails-ta...@googlegroups.com.
> For more options, visit this group at http://groups.google.com/group/rubyonrails-talk?hl=en.
>
>

oren

unread,
Apr 7, 2010, 12:30:58 AM4/7/10
to Ruby on Rails: Talk
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'

On Apr 7, 3:31 am, Ryan Waldron <r...@erebor.com> wrote:
> Where's the error message?
>

Nicolas Iensen

unread,
Apr 7, 2010, 7:15:27 AM4/7/10
to Ruby on Rails: Talk
Hi Oren,

Try this "accepts_nested_attributes_for :versions" in the location.rb
file.

Cheers!

oren

unread,
Apr 7, 2010, 2:17:02 PM4/7/10
to Ruby on Rails: Talk
I already have this:

has_many :versions, :dependent => :destroy
accepts_nested_attributes_for :versions

oren

unread,
Apr 7, 2010, 2:21:48 PM4/7/10
to Ruby on Rails: Talk
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?

Nicolas Iensen

unread,
Apr 8, 2010, 7:36:26 AM4/8/10
to Ruby on Rails: Talk
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

oren

unread,
Apr 8, 2010, 9:34:26 PM4/8/10
to Ruby on Rails: Talk
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!

Reply all
Reply to author
Forward
0 new messages