Rails Nested Forms Not Updating

2019-08-02 15:12发布

问题:

I'm having a problem getting update_attributes to update nested models in my form. I don't have any errors but the nested attributes aren't saving. Here's the relevant code:

Users model:

class User < ActiveRecord::Base 
  has_many :orders
  has_many :achievements    

  accepts_nested_attributes_for :achievements 

Achievements model:

class Achievement < ActiveRecord::Base
  belongs_to :user 

Edit User form:

<%= form_for @user, :html => { :multipart => true } do |f| %>   

...

<%= f.fields_for :achievements do | a | %>
    <%= a.label :title %>
    <%= a.text_field :title %><br>
<% end  %>  

Edit method:

def edit    
    @user = nil
    if params[:id] != nil
      @user = User.find(params[:id]) 
    elsif
      @user = current_user
    else
      redirect_to login_path
    end  
    5.times { @user.achievements.build }
  end  

Update method:

@user.update_attributes params[:user]

But when I check the @user.achievements array it's always empty even when I fill out the forms. Does anyone know what I'm doing wrong?

回答1:

You should change to accepts_nested_attributes_for :achievements_attributes. You can inspect the parameters for the form posts in your log file to see how rails named the form elements. Or inspect the HTML on your page.



回答2:

In the user model:

attr_accessible :achievements_attributes

Seems to work :)