我有以下活动记录模型:

class Catalog < ActiveRecord::Base
   has_and_belongs_to_many :customers
end

class Customer < ActiveRecord::Base
   has_and_belongs_to_many :catalogs
end


现在在我的索引中,我想列出所有按如下方式排序的客户:
首先是已经属于目录的成员,然后是所有其他成员。

我已经尝试过这样的事情:

@customers = Customer.all.joins('LEFT JOIN catalogs_customers ON catalogs_customers.customer_id = customers.id').order('catalogs_customers.catalog_id DESC, customers.company_name ASC')


这接近我的目标,但是我得到了所有属于目录成员的客户(无论它是什么),然后是所有其他客户。

最佳答案

您的问题有点不清楚,但是我无法提出更多问题,因此无论如何,我会尽力而为。
听起来您想列出所有优先于与一个特定目录相关联的客户的客户,但是您的代码示例并未告诉我们您打算如何设置。我假设您有一个实例变量@catalog_id。然后,您想为联接提供一个条件,在该条件下,您只能选择带有catalogs_customerscatalog_id。因此,尝试类似:

@customers = Customer.all.joins('LEFT JOIN catalogs_customers ON catalogs_customers.customer_id = customers.id').
.where(catalogs_customers: { catalog_id: @catalog_id }).
order('catalogs_customers.catalog_id DESC, customers.company_name ASC')


希望能有所帮助。

关于mysql - Rails:通过has进行订单查询,并且属于多个状态,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48749368/

10-10 11:55