Mongoid - has_many:父母失去与孩子的关系

时间:2013-06-03 18:37:44

标签: ruby-on-rails mongodb mongoid

我有以下(简化)关系:

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配置的问题吗?或者我没有正确设置关系?

1 个答案:

答案 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

如果某人对正在发生的事情有所解释,那将非常有趣并有助于我的理解。