blo*_*ilk 3 ruby ruby-on-rails
我不久前在使用块格式化MySQL查询时发布了一个类似的问题并获得了非常好的响应,但它们对于手头的问题非常具体.这一次,我正在处理.sum()在表中获取行的问题.这就是我现在所拥有的:
def balance
balance = 0
items.each do |item|
balance = balance + item.charges.sum(:revenue, :conditions => ['created_at >= ?', Time.now.beginning_of_month])
end
balance
end
Run Code Online (Sandbox Code Playgroud)
我的目标是获得给定用户本月所有费用的总和.费用属于属于用户的项目.我确信在Ruby/Rails中有更好的方法.
你会怎么做?
可以进行直接转换:
def balance
conds = ["created_at > ?", Time.now.beginning_of_month]
items.inject(0) do |total, item|
total + item.charges.sum(:revenue, :conditions => conds)
end
end
Run Code Online (Sandbox Code Playgroud)
可能有更多最佳方法取决于您的关系如何绘制出来.例如,您可以执行以下操作:
def balance
Charge.sum :revenue,
:conditions => ["charges.item_id IN (?) AND created_at > ?",
items.map { |item| item.id },
Time.now.beginning_of_month]
end
Run Code Online (Sandbox Code Playgroud)
对于这类情况,map,inject,select,等等,是非常宝贵的工具. 这里有关于注入的冗长讨论,并且有关更多信息,请参阅可枚举模块的RDoc.
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |