activerecord - 来自同一个表的两个关联的顺序

时间:2017-02-27 03:30:43

标签: ruby-on-rails activerecord

目前我的模特中有:

class RoutePair < ActiveRecord
  belongs_to :flying_airline, class_name: 'Airline'
  belongs_to :home_airline, class_name: 'Airline'
end

我正在尝试编写一个查询,首先通过飞行航空公司名称命令他们,然后是家庭航空公司名称。我的预期结果将如下所示:

AirAsia Air Hong Kong
AirAsia Eastern Air Lines
AirAsia Cebu Pacific
Cebu Pacific Air Hong Kong
Cebu Pacific AirAsia
Cebu Pacific Eastern Air Lines

目前我只能通过flying_airline订购。

RoutePair.joins(:flying_airline, :home_airline).order('airlines.name')

第二个协会是否有办法订购?

1 个答案:

答案 0 :(得分:2)

当您使用不同的外键在同一个表上加入两次时,ActiveRecord会继续为您提供除第一个表之外的所有别名。因此,虽然您可以在SQL中引用flying_airlineairlines的关系,但这对其余部分不起作用。

创建的别名是您要加入的AR关系的多元化名称(home_airlines),其前缀为正在加入的表的复数类名称(route_pairs)。因此,在这种情况下,别名为home_airlines_route_pairs

RoutePair.joins(:flying_airline, :home_airline).order('home_airlines_route_pairs.name')

由两个协会订购:

RoutePair.joins(:flying_airline, :home_airline).order('airlines.name asc, home_airlines_route_pairs.name asc')

要查看ActiveRecord将您的代码转换为的SQL,您始终可以在查询中运行.to_sql

RoutePair.joins(:flying_airline, :home_airline).to_sql