2013-06-03 47 views
0

我有以下的(简化)的关系:Mongoid - 的has_many:父母失去相对于孩子

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 

现在我有follwing问题:当我更新我的控制器支付,支付数据被更新,但项目“忘记”有关更新的元素。这是我的控制器相关代码:

def update 
    respond_with Payment.where(id: params[:id]).update(params[:payment]) 
end 

如果我去到控制台,“payment.project”将返回相关项目,而“project.payments”不会显示相关付款。 “付款”仍然有与项目的ID相关的“project_id”字段。

向项目中添加和删除付款可以正常工作,但只有在编辑付款(project_id未更改,仅限其他字段,例如金额)时才存在此问题。

可能是什么问题?这是我的mongoid配置问题吗?或者我没有正确设置关系?

回答

0

经过大量的谷歌搜索和反复试验,我找到了一个解决方案。问题出在我的控制器上。使用update_attributes而不是update修复了问题。因此,控制器的相关部分应该阅读:

def update 
    respond_with Payment.where(id: params[:id]).first().update_attributes(params[:payment]) 
end 

此外,上述代码还缺少自动保存:真为的has_many性质。

class Project 
    include Mongoid::Document 
    field :name 
    field :description 
    has_many :payments, autosave:true 
end 

如果有人解释了究竟发生了什么,那对我的理解会非常有趣和有帮助。