Rails嵌套表单不更新

时间:2011-07-05 21:59:44

标签: ruby-on-rails nested-forms update-attributes

我在获取update_attributes以更新表单中的嵌套模型时遇到问题。我没有任何错误,但嵌套属性不保存。这是相关的代码:

用户模型:

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

  accepts_nested_attributes_for :achievements 

成就模型:

class Achievement < ActiveRecord::Base
  belongs_to :user 

修改用户表单:

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

...

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

编辑方法:

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  

更新方法:

@user.update_attributes params[:user]

但是当我检查@ user.achievements数组时,即使我填写表单,它也总是空的。有谁知道我做错了什么?

2 个答案:

答案 0 :(得分:2)

您应该更改为accepts_nested_attributes_for :achievements_attributes。您可以检查日志文件中表单帖子的参数,以查看rails如何命名表单元素。或者检查页面上的HTML。

答案 1 :(得分:0)

在用户模型中:

attr_accessible :achievements_attributes

似乎工作:)