2014-03-31 57 views
0

这是一个简化的什么,我试图解决的版本: 在Ruby 2.0.0,4.0.0的Rails,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并在块内正确插入该参数?谢谢。

回答

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 

或者更一般的,其中参数是关联或自定义的名称(非柱)方法

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

BroiSatse,谢谢......这是您第二次回答我的问题,我非常感激。我做了一个快捷的摘录和总结,你为我打开了一个全新的世界。我在那个时候,在我需要开始思考SQL查询而不是仅仅做一些事情的时候。 – allenwlee