0

我有以下(简化的)关系:

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

4

1 回答 1

0

经过大量的谷歌搜索和反复试验,我找到了解决方案。问题出在我的控制器上。使用update_attributes代替update,可以解决问题。因此,控制器的相关部分应为:

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

此外,上面的代码也缺少 has_many 属性的 autosave:true 。

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

如果有人对到底发生了什么有一个解释,那将非常有趣并且有助于我的理解。

于 2013-06-04T03:56:01.140 回答