我有以下(简化)关系:
class Project
include Mongoid::Document
field :name
field :description
has_many :payments
end
class Payment
include Mongoid::Document
field :date
field :amount
belongs_to :project
end
现在我遇到了以下问题:当我在控制器中更新付款时,付款数据会更新,但项目会“忘记”更新的元素。这是我的控制器的相关代码:
def update
respond_with Payment.where(id: params[:id]).update(params[:payment])
end
如果我进入控制台,“payment.project”将返回相关项目,而“project.payments”将不会显示相关付款。 “payment”仍然具有相关的“project_id”字段,其中包含项目的ID。
在项目中添加和删除付款工作正常,只有在编辑付款时才会出现此问题(project_id未更改,只有其他字段,例如金额)。
可能是什么问题?这是我的mongoid配置的问题吗?或者我没有正确设置关系?
答案 0 :(得分:0)
经过大量的谷歌搜索和反复试验后,我找到了解决方案。问题出在我的控制器上。使用update_attributes
代替update
,可以解决问题。因此,控制器的相关部分应为:
def update
respond_with Payment.where(id: params[:id]).first().update_attributes(params[:payment])
end
此外,上面的代码也缺少自动保存:对于has_many属性为true。
class Project
include Mongoid::Document
field :name
field :description
has_many :payments, autosave:true
end
如果某人对正在发生的事情有所解释,那将非常有趣并有助于我的理解。