获取许多不同模型和关联之间的计数值
Getting a count value between many different models and associations
我一直想知道在几个不同的模型和关联之间获取计数值的最简单方法是什么。
我想在我看来有这样的东西
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
我推断您想要与特定商店关联的所有 complaint_reviews 的计数。
在这种情况下,您需要以下内容:
shop = # get shop according to your criteria
ComplaintReview.
joins(complaint: {article: {receipt: :shop}}).
where(shops: {id: shop.id}).
count
我想您可以通过在收据的 shop_id
列应用条件来保存 shop
连接;像这样:
ComplaintReview.
joins(complaint: {article: :receipt}).
where(receipts: {shop_id: shop.id}).
count
如果所有收据都关联了商店,则两者的结果应该相同。但我会选择第一种方法。
这里要记住的是 'start' 使用您最终想要计数的模型。
此外,如果存在任何一对多关系,您会按 "complain_reviews.id" 对结果进行分组,然后执行计数。
好的,感谢上面的代码,我设法想出了一个可行的解决方案:
#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 %>
非常感谢您的帮助。
我一直想知道在几个不同的模型和关联之间获取计数值的最简单方法是什么。
我想在我看来有这样的东西
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
我推断您想要与特定商店关联的所有 complaint_reviews 的计数。
在这种情况下,您需要以下内容:
shop = # get shop according to your criteria
ComplaintReview.
joins(complaint: {article: {receipt: :shop}}).
where(shops: {id: shop.id}).
count
我想您可以通过在收据的 shop_id
列应用条件来保存 shop
连接;像这样:
ComplaintReview.
joins(complaint: {article: :receipt}).
where(receipts: {shop_id: shop.id}).
count
如果所有收据都关联了商店,则两者的结果应该相同。但我会选择第一种方法。
这里要记住的是 'start' 使用您最终想要计数的模型。
此外,如果存在任何一对多关系,您会按 "complain_reviews.id" 对结果进行分组,然后执行计数。
好的,感谢上面的代码,我设法想出了一个可行的解决方案:
#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 %>
非常感谢您的帮助。