我一直想知道在几个不同的模型和协会之间获取计数值的最简单方法是什么。
我想在我看来有类似的东西
shop.receipts.articles.complaints.complaint_reviews.count
以下是我的模型和它们之间的关联:
class Shop < ActiveRecord::Base
has_many :receipts
end
class Receipt < ActiveRecord::Base
has_many :articles, dependent: :destroy
belongs_to :shop
accepts_nested_attributes_for :articles, allow_destroy:true, :reject_if => :all_blank
end
class Article < ActiveRecord::Base
belongs_to :receipt
has_one :complaint
end
class Complaint < ActiveRecord::Base
belongs_to :article
has_many :complaint_reviews
end
class ComplaintReview < ActiveRecord::Base
belongs_to :complaint
end
答案 0 :(得分:1)
我推断您想要计算与特定商店相关的所有complaint_reviews。
在这种情况下,您需要以下内容:
shop = # get shop according to your criteria
ComplaintReview.
joins(complaint: {article: {receipt: :shop}}).
where(shops: {id: shop.id}).
count
我认为您可以通过在shop
收据列上应用条件来保存shop_id
联接;像这样:
ComplaintReview.
joins(complaint: {article: :receipt}).
where(receipts: {shop_id: shop.id}).
count
如果所有收据都与商店相关联,则结果应该相同。但我选择第一种方法。
这里要记住的是开始&#39;与您最终想要计数的模型。
此外,如果存在任何一对多关系,您可以将结果分组为&#34; complain_reviews.id&#34;然后进行了计数。
答案 1 :(得分:0)
好的,感谢上面的代码,我设法提出了一个有效的解决方案:
#shops_controller.rb:
def show
@count = ComplaintReview.
joins(complaint: {article: {receipt: :shop}}).
where(shops: {id: @shop.id}).
count
respond_with(@shop)
end
#shops/show.html.erb:
<%= @count %>
非常感谢你的帮助。