Rails:按顺序查询并属于多个在线

时间:2018-02-12 15:02:18

标签: mysql ruby-on-rails sql-order-by

我有以下有效记录模型:

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')

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

1 个答案:

答案 0 :(得分:0)

你的问题有点不清楚,但我无法发表评论,所以无论如何我都会尽力而为。 听起来您希望列出所有优先考虑与一个特定目录相关联的客户,但您的代码示例并未告诉我们您计划如何设置。我假设你有一个实例变量@catalog_id。然后,您希望在加入时提供条件,只选择catalogs_customers catalog_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')

希望有所帮助。