具有多重处理的属性(轨道)

时间:2013-08-30 14:57:57

标签: ruby-on-rails class attributes sum attr

我有一个System类,其中包含一个名为price的attr和一个Subsystem类(belongs_to :system)以及此price attr。

问题出在我的模型中,因为我有两种不同的方式来处理system.price

1)系统至少有一个子系统(!system.subsystems.empty?):我希望价格是所有子系统价格的总和。在这种情况下,我的模型有它的方法价格和一个循环来总结子系统的价格。

2)系统没有任何子系统(system.subsystems.empty?):价格只是一个填写表格的输入字段。

我面临的问题是如何“选择”采用哪种方式......

任何人都可以帮助我吗?提前了很多!!!

2 个答案:

答案 0 :(得分:1)

您可以随时将系统的价格存储在其他地方,并在必要时选择使用它:

class System

  has_many :subsystems

  def price
    subsystems.empty? system_price : subsystems.sum('price')
  end

  def system_price
    # maybe an active record attribute, this method might not exist
    25.00
  end

end

答案 1 :(得分:0)

您只需覆盖模型中的price方法即可:

def price
  if subsystems.empty? 
    self.attributes["price"] 
  else
    subsystems.map(&:price).sum
end