【发布时间】:2016-09-14 08:04:52
【问题描述】:
我有以下两种型号:
Client
has_many :cases
Case
belongs_to :client
假设我有 2 个客户 c1 和 c2。
c1 有 1 例,c2 有 2 例。
c1 = Client.create(name: 'C1')
c2 = Client.create(name: 'C2')
case1 = Case.create(type: 'Normal', client: c1)
case2 = Case.create(type: 'Normal', client: c2)
case3 = Case.create(type: 'High', client: c2)
我想获取所有客户端并按每个客户端 asc/desc 的最后一个案例类型排序。
所以如果我按 asc 排序,我应该得到 'c1' 然后是 c2 的结果。如果我按 desc 排序,我应该得到 'c2' 然后 'c1' 的结果。以下是我迄今为止尝试过的。
Client.includes(:cases).order('cases.type asc') # => 'C2,C1'
Client.includes(:cases).order('cases.type desc') # => 'C2,C1'
由于 c2 也有一个类型为“正常”的案例,我认为查询似乎是先找到客户端,然后执行类似于 client.cases 的操作。然后,我认为它只在每个客户端下订购案例,而不是跨客户端订购案例。
我觉得我的解释有点混乱。如果你有,请给我一个问题。谢谢。
【问题讨论】:
-
您是否尝试过使用空数据库的示例?我认为它适用于 rails 4。可能发生的情况是您在两种情况下都会返回 c2,c1,因为未定义具有相同
type的记录的顺序。您是否将type用于 STI?当您将名称为type的列用于 STI 以外的其他目的时,可能会产生不必要的副作用。 -
感谢@slowjack2k 的评论。我已经更新了返回结果,因为这是我之前的错误。无论如何,我的问题是我按升序或降序排序,结果是一样的。另一方面,感谢您提到使用“类型”作为列名的副作用。实际上,我的列名是“case_type”,但我只是说类型作为示例,而我忘记了这一点。无论如何,我不会将它用于 STI。
标签: sql ruby-on-rails activerecord queryinterface