将Object的参数传递给Object方法

时间:2014-03-31 20:21:03

标签: ruby ruby-on-rails-4

这是我想要解决的简化版本: 在Ruby 2.0.0中,Rails 4.0.0,Activerecord

细分has_many销售

Sale.find(1).bid = 1
Sale.find(1).ask = 2
Sale.find(2).bid = 10
Sale.find(2).ask = 20
etc

当我写这个方法时:

class Segment
  def add_stuff(param)
    sales.map{ |s| s.param }.inject(:+)
  end
end

问题:如何将bidask作为param传递并在块内正确插入该参数?感谢。

1 个答案:

答案 0 :(得分:0)

当您可以使用map或其他查询方法时,永远不要在活动记录关联上使用pluck,例如sum

def add_staff(param)
  sales.sum(param)
end

仅仅为了完整性,这里是如何使用map - 请注意,地图比查询方法慢得多且容易出错:

def add_staff(param)
  sales.map {|s| s[param]}        # if param is name of the column on sales model.
end

或者更一般,其中param是关联名称或自定义(非列)方法

def add_staff(param)
  sales.map(&param)   # Or map {|s| s.send(param) }
end