如何在Ruby on Rails中加入ActiveRecord查询中的间接关联?

时间:2015-03-18 16:00:03

标签: ruby-on-rails ruby activerecord rails-activerecord

在我的Ruby on Rails应用程序中,我有一个模型Instance,它属于另一个模型ZoneZone模型本身属于Country模型。我正在获取一组Instance个对象,如下所示:

scope :thisweek, -> { joins(:zone).where(zones: {created_at: ...}).includes(:zone)

我也想加入CountryZoneInstance,然后根据Instance字段对结果zone.country.name进行排序。有人可以帮我吗?

1 个答案:

答案 0 :(得分:4)

您可以尝试以下操作:

scope :this_week, proc do
  includes(zone: :country)
    .where(zones: {created_at: whatever})
    .order('countries.name ASC')
end

(我故意使用do/end格式在每条指令的多行上显示)


另外,你应该知道的事情:

# if
Zone belongs_to :country
# then
Zone.includes(:country).where(countries: { id: 12 })
#                    ^               ^^
# but if
Zone has_many :countries
# then
Zone.includes(:countries).where(countries: { id: 12 })
#                     ^^               ^^

where始终使用表格的名称,但includes / joins使用模型中声明的关系名称。