从联接更改为包括破坏查询

时间:2015-08-05 16:09:52

标签: sql ruby-on-rails postgresql ruby-on-rails-4 squeel

我有这个有效的查询:

@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的表格

1 个答案:

答案 0 :(得分:1)

在{{1>}使用 条件 时,您需要附加.references

includes
  

如果您想为所包含的模型添加条件,则必须这样做   明确地引用它们

参考includes

中的 条件 部分