2013-06-03 50 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 

如果有人解釋了究竟發生了什麼,那對我的理解會非常有趣和有幫助。