从一组对象中算出关联对象的更好方法

时间:2019-04-16 04:18:43

标签: ruby-on-rails

在以下情况下,如何计算作为票证的项目数?票证列位于“项目”表中。

我正在尝试获取一组兑换,然后计算该兑换组中“票”的项目数量。

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

1 个答案:

答案 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