Ruby on rails Rails:急切地加载三个关联之外的模型
我想在表列中显示一个包含所有计划以及相关类、合作伙伴和位置的表Ruby on rails Rails:急切地加载三个关联之外的模型,ruby-on-rails,ruby-on-rails-4,activerecord,associations,Ruby On Rails,Ruby On Rails 4,Activerecord,Associations,我想在表列中显示一个包含所有计划以及相关类、合作伙伴和位置的表 # view <% @schedules.each do |schedule| %> <%= schedule.date.strftime("%d %b %Y") %> <%= schedule.klass.name %> <%= schedule.partner.company %> <%= schedule.partner.city.name %>
# view
<% @schedules.each do |schedule| %>
<%= schedule.date.strftime("%d %b %Y") %>
<%= schedule.klass.name %>
<%= schedule.partner.company %>
<%= schedule.partner.city.name %>
<%= schedule.start_time.strftime("%l:%M%P") %> -
<%= schedule.end_time.strftime("%l:%M%P") %>
<% end %>
# models
Schedule
belongs_to :klass
belongs_to :partner
Klass
belongs_to :partner
Partner
belongs_to :city
has_many :klasses
has_many :schedules
City
none
# controller Schedules
@schedules = Schedule.includes(:klass, :partner).order(:date, :start_time, :end_time)
我试过这个:
Schedule.includes(:klass, :partner).includes(:city)
但它给了我一个错误:
Association named 'city' was not found on Schedule; perhaps you misspelled it?
我已经阅读了关于活动记录查询的Rails指南,但是我不知道如何改进查询。谢谢你的帮助。谢谢
Schedule
belongs_to :klass
belongs_to :partner
Klass
has_many :schedules
has_many :partners, through: :schedules
Partner
belongs_to :city
has_many :schedules
has_many :klasses, through: :schedules
City
has_many :partners
查询应该是
@schedules = Schedule.includes(:partner => :city).order(:date, :start_time, :end_time).select('partners.*, cities.name')
明白了:
@时间表=时间表。包括:克拉斯,合作伙伴::城市。顺序:日期,:开始时间,:结束时间
结果:
SELECT "schedules".* FROM "schedules" ORDER BY "schedules"."date" ASC, "schedules"."start_time" ASC, "schedules"."end_time" ASC
SELECT "klasses".* FROM "klasses" WHERE "klasses"."id" IN (6, 1, 7, 9, 10, 3)
SELECT "partners".* FROM "partners" WHERE "partners"."id" IN (3, 4, 2)
SELECT "cities".* FROM "cities" WHERE "cities"."id" IN (23, 24)
SELECT "schedules".* FROM "schedules" ORDER BY "schedules"."date" ASC, "schedules"."start_time" ASC, "schedules"."end_time" ASC
SELECT "klasses".* FROM "klasses" WHERE "klasses"."id" IN (6, 1, 7, 9, 10, 3)
SELECT "partners".* FROM "partners" WHERE "partners"."id" IN (3, 4, 2)
SELECT "cities".* FROM "cities" WHERE "cities"."id" IN (23, 24)