如何使客户/索引仅显示负余额的客户?
我有 Client.rb :
def index
@client = Client.where(:balance < 0)
end
ClientsController.rb:
LetterColumn
考虑到,&#34;平衡&#34;未保存为数据库中表的列...
答案 0 :(得分:2)
您可以使用Enumerable#select
过滤Ruby:
class Client
def all_incomes
incomes.map(&:amount).sum
end
def all_expences
expences.map(&:amount).sum
end
def balance
all_incomes - all_expences
end
def self.postive_balance
self.all.select {|c| c.balance < 0 }
end
end
然而,考虑到足够多的客户端,它的效率会非常低。您应该选择incomes.amount
和expenses.amount
的聚合,并在数据库级别进行计算。
答案 1 :(得分:1)
def index
@client = Client.joins(:incomes,:expenses).having("SUM(incomes.amount) - SUM(expenses.amount) < 0")
end
加入两个模型并在查询时应用条件,如上所述。这会快得多。