簡體   English   中英

如何對一個表進行排序與​​Rails 4中的另一個表有很多關系?

[英]How to sort one table has many relationship with another table in Rails 4?

我有三個表供應商,評論,工作表。 我必須排序所有供應商。 (admin_verified:true)評論。 如果'n'供應商具有相同數量的審核計數,則按工作計數排序。

我寫了一個有效的記錄查詢,但如果供應商至少有一個經過驗證的評論,它只需要供應商。 查詢:

Vendor.
joins(:reviews).
where("reviews.verified"=>true).
group("reviews.vendor_id").
order("count(reviews.vendor_id)")

此查詢僅在兩個表之間。 如何根據以上順序編寫rails活動記錄查詢以對供應商進行排序?

# vendor.rb
has_many :reviews
has_many :works

# review.rb (table_fields: 'verified','comment',... and so on)
belongs_to :vendor

# work.rb (table_fields: 'work_title','work_description',... and so on)
belongs_to :vendor

你可以嘗試這樣的事情:

vendors = Vendor.joins('LEFT JOIN (SELECT id, vendor_id FROM reviews WHERE reviews.verified = 1) as r ON r.vendor_id=vendors.id')
              .joins('LEFT JOIN works ON works.vendor_id=vendors.id')
              .group('vendors.id')
              .select('vendors.* , COUNT(DISTINCT r.id) AS no_reviews, COUNT(DISTINCT works.id) AS no_works')
              .order('no_reviews DESC, no_works DESC')

在這種情況下,您還可以從供應商對象訪問計數,例如: vendors.first.no_reviews

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM