Rails update_attributes不更新嵌套属性

时间:2012-04-29 14:17:51

标签: ruby-on-rails nested-attributes

在我的Rails应用程序中,我的每个组都有_many:expenses。每笔费用has_many:shares。我已经成功设置了一个嵌套表单,允许我同时创建费用和共享。但是,当我使用相同的表单来尝试编辑费用时,我设置的确认以确保所有共享的总和等于费用总额是失败的。

这是我的控制器的更新方法:

def update
  @expense = Expense.find(params[:id])
  @group = Group.find(params[:group_id])
  if @expense.update_attributes(params[:expense])
    redirect_to @group
  else
    render 'edit'
  end
end

在我的模型文件中,我已经在expense.rb中声明了accepts_nested_attributes_for:shares,并在其attr_accessible列表中添加了:shares_attributes。

我在expense.rb中设置的验证失败的是:

def shares_must_equal_total_amount
    if self.shares.sum(:amount) != self.amount
        errors.add(:shares, " must equal expense amount")
    end
end

我最困惑的是,如果我

puts @expense.amount and 
@expense.shares.sum(:amount)

在我的update方法的else子句中(在渲染'edit'之前),这两个值是不同的。但是,在params [:shares_attributes]中,个别份额显然正在更新并通过验证。因此,出于某种原因,当我调用@ expense.update_attributes(params [:expense])时,@ expense.shares没有被更新。

我在这里缺少什么?谢谢你的帮助。

0 个答案:

没有答案