0

早上好,当我尝试在两个类之间链接属性时,我的 rails 应用程序出现问题。让我更好地解释一下:

我有一个System班级,belongs_to我的Area班级(一个区域has_many系统)。它们都有一个名为 的属性price。一个区域的价格必须是它拥有的所有系统价格的总和。

有什么方法可以建立这种关系,而不必每次我更改其中一个系统的价格时都更新该地区的价格?(我做类似的事情@system.area.price = @system.area.price + @system.price

4

2 回答 2

0

如果您可以在数据库中处理此问题,sum计算将为您完成: http: //api.rubyonrails.org/classes/ActiveRecord/Calculations.html

class Area < ActiveRecord::Base
  has_many :systems
  def price
    systems.sum('price')
  end
end

您可以完全删除该区域的价格字段。

于 2013-08-22T14:40:33.290 回答
0

除非您想走在将触发器引入数据库的黑暗、危险的道路上,否则简短的回答并不是真的。

长答案是您需要有after_save处理程序为您进行此调整。始终确保您应用此方法的方式是增加而不是重置,否则您将遇到竞争条件。

在您的简短示例中,不清楚您要的是什么。除非 Area 有一个base_price,否则您将无限期地继续添加系统价格。您需要在此处计算出确切的逻辑,但您的要求示例如下:

class System < ActiveRecord::Base
  belongs_to :area
  after_save :update_area_price

protected
  def update_area_price
    self.area and self.area.increment!(:price, self.price)
  end
end
于 2013-08-22T14:38:46.933 回答