我需要能够显示具有特定条件的关联模型的计数。我有Mall
模型has_many Shops
,Shop
模型属于Mall
和has_many Sales
,Sale
模型属于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
答案 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