我试图检索依赖于他们的关联记录的关联记录'属性。以下是(删节)模型。
class Holding
belongs_to :user
has_many :transactions
def amount
transactions.reduce(0) { |m, t| t.buy? ? m + t.amount : m - t.amount }
end
class << self
def without_empty
includes(:transactions).select { |h| h.amount.positive? }
end
end
class Transaction
belongs_to :holding
attributes :action, :amount
def buy?
action == ACTION_BUY
end
end
问题是我的without_empty
方法返回一个数组,这阻止我使用我的分页。
有没有办法重写Holding#amount
和Holding#without_empty
以便使用ActiveRecord / SQL更有效地运行?
答案 0 :(得分:0)
这是我最终使用的内容:
def amount
transactions.sum("CASE WHEN action = '#{Transaction::ACTION_BUY}' THEN amount ELSE (amount * -1) END")END")
end
def without_empty
joins(:transactions).group(:id).having("SUM(CASE WHEN transactions.action = '#{Transaction::ACTION_BUY}' THEN transactions.amount ELSE (transactions.amount * -1) END) > 0")
end