【发布时间】:2015-08-05 16:09:51
【问题描述】:
我有这个工作查询:
@search = Availability.joins{facility.activities}
.where{activities.id == s_activity}
但我的观点是从设施那里获得大量信息,这导致了 N+1 问题。
所以我决定我应该使用includes 来急切地加载我的关联
@search = Availability.includes{facility.activities}
.where{ facility.activities.id == s_activity)}
但这会导致错误:
!! #<ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "activities"
LINE 1: ...T "availabilities".* FROM "availabilities" WHERE ("activitie...
^
这些是关联:
class Activity < ActiveRecord::Base
has_and_belongs_to_many :facilities
end
class Availability < ActiveRecord::Base
# Associations
belongs_to :facility
end
class Facility < ActiveRecord::Base
# Associations
has_and_belongs_to_many :activities
has_many :availabilities
end
有一个名为activities_facilities 的表用于has_and_belongs_to_many
【问题讨论】:
-
我在 where 子句中尝试了不同的变体,但我得到了同样的错误
-
试试
Availability.includes(facility: [:activities]).where('facility.activities.id = ?', s_activity).references(:facility, :activities) -
你可以试试这个
Availability.includes(facility: [:activities]).where('activities.id = ?', s_activity).references(:facility, :activities)吗? -
我刚刚在他们的文档中读到了这个:
Includes works similarly with joins, it uses outer join defaultly. In Rails 4, you need to use references with includes together.答案一直都在那里 -_- 非常感谢。如果您提交作为答案,我会给您功劳
标签: sql ruby-on-rails postgresql ruby-on-rails-4 squeel