我的多态模型之间存在关联。
示例:的
class Review
belongs_to :review_subject, :polymorphic => true
end
但是,我想对此进行调用:review_subject association我知道所有结果都属于某种类型。
在我的情况下,我想这样做,所以我可以加入review_subject,然后对它施加条件。在多态关系上这样做通常会导致这引发EagerLoadPolymorphicError。这背后的逻辑是,它无法知道要加载什么模型以执行连接,但这不适用于我的情况,因为我已经知道此查询中只涉及一个模型。
示例,我知道所有相关的评论都属于一本书,我只想显示书籍所在的评论:
Review.joins(:review_subject)
.where(review_subject_type => "Book")
.where("reviewed.book_author IS NOT NULL")
有没有办法暂时禁用多态关系?
我提出的最佳解决方案是在Review模型中添加第二个关联,belongs_to :review_subject_books_only
不是多态的,只能在这种情况下调用。但是,这在模型中都是一个丑陋的黑客,并且除非视图还引用了Review的review_subject_books_only,否则它也会混淆include
次调用。
答案 0 :(得分:1)
以相反的方式进行查询:
Book.joins(:reviews).where('book_author is not null')