Rails Nested Forms Not Updating

2019-08-02 14:49发布

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?

2条回答
唯我独甜
2楼-- · 2019-08-02 15:18

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.

查看更多
等我变得足够好
3楼-- · 2019-08-02 15:28

In the user model:

attr_accessible :achievements_attributes

Seems to work :)

查看更多
登录 后发表回答