在我的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没有被更新。
我在这里缺少什么?谢谢你的帮助。