我有一个Review
模型和一个CheckIn
模型:
class Review < ApplicationRecord
belongs_to :reviewable, polymorphic: true
belongs_to :check_in, -> { where( reviews: { reviewable_type: "CheckIn"} ).includes(:review) }, foreign_key: 'reviewable_id', optional: true
end
class CheckIn < ApplicationRecord
has_one :review, as: :reviewable
end
并希望能够提取日期范围内:reviews
的所有:check_ins
。例如:
Review.includes(:check_in).where("check_ins.created_at >= ?", Date.today)
此操作由于以下原因而失败:
ActiveRecord::StatementInvalid: PG::UndefinedTable: ERROR: missing FROM-clause entry for table "check_ins"
有什么办法可以做到这一点?理想情况下,我想要一个ActiveRecord::Relation
而不是一个数组。
答案 0 :(得分:3)
是的,您只需要让ActiveRecord
知道您打算针对check_ins
表进行查询(AR知道,如果where子句看起来像check_ins: { anything }
,即它是{{ 1}},但不知道它是否为Hash
(例如此处),因此它确实为String
,如下所示:
left join
或使用Review.includes(:check_in).references(:check_ins).where('check_ins.created_at >= ?', Date.today)
:
eager_load
此外,如果您使用的是Ruby 2.6,则可以使用无限范围,但是我不确定它是否有效(尽管我很高兴,它看起来很酷:)):
Review.eager_load(:check_in).where('check_ins.created_at >= ?', Date.today)