在以下情况下,如何计算作为票证的项目数?票证列位于“项目”表中。
我正在尝试获取一组兑换,然后计算该兑换组中“票”的项目数量。
class Item < ActiveRecord::Base
has_many :redemptions
class Redemption < ActiveRecord::Base
belongs_to :item
#This method works, but is there a much better way?
def tickets_sold
my_tickets_sold = 0
@redemptions = Redemption.where(state: "valid")
redemptions.each do |redemption|
if redemption.item.ticket == true
my_tickets_sold = my_tickets_sold + 1
end
end
my_tickets_sold
end
答案 0 :(得分:2)
是的,您可以采用更好的方法,可以使用以下3种方法
1)添加协会以获取售票记录
has_many :sold_tickets, -> { left_outer_joins(:item).where("state = 'valid' AND items.ticket = true ") }
2)添加获取已售票数的范围
scope :sold_tickets_count, -> { left_outer_joins(:item).where("state = 'valid' AND items.ticket = true ").count }
3)在模型中添加实例方法以获取已售票的数量
def sold_tickets_count
left_outer_joins(:item).where("state = 'valid' AND items.ticket = true ").count
end