如何显示关联模型的总记录数 - Rails 4

时间:2016-04-05 11:17:12

标签: ruby-on-rails

我需要能够显示具有特定条件的关联模型的计数。我有Mall模型has_many ShopsShop模型属于Mall和has_many SalesSale模型属于belongs_to { {1}}。

基本上我想要做的是首先迭代每个商场以显示:每个商场的名称,然后我想显示属于每个商场的商店有多少总销售记录。但是,我只想用以下标准显示销售记录的数量:Shop

我不确定如何实现这一点,因为Sales没有直接连接到Malls。以下代码是我实现这一目标的最佳尝试,但它不起作用。

Sale.where('offer_end >= ?', Date.today)

购物中心模型

<% @malls.each do |mall| %>
  <%= mall.name %> - <%= mall.shops.sales.where('offer_end >= ?', Date.today).count %>
<% end %>       

商店模特

class Mall < ActiveRecord::Base
    has_many :mall_shops
    has_many :shops, :through => :mall_shops
    validates :name, presence: true, uniqueness: true
end

销售模式

 class Shop < ActiveRecord::Base
    has_many :categorizations
    has_many :categories, :through => :categorizations
    has_many :mall_shops
    has_many :malls, :through => :mall_shops
    has_many :sales, dependent: :destroy
end

1 个答案:

答案 0 :(得分:3)

首先,您可以嵌套has_many :through个关联:

在Mall.rb中:

has_many :sales, through: :shops

您还可以为活跃销售创建范围:

在Sale.rb:

scope :active, -> do
   where('offer_end >= ?', Date.today)   # Pay attention to time zone here
end

现在,您可以获得商场的活跃销售:

@mall = Mall.find(...)
@mall.sales.active.count