Ruby on Rails:有没有办法暂时禁用多态关联?

时间:2011-05-16 22:23:15

标签: ruby-on-rails polymorphic-associations

我的多态模型之间存在关联。

示例:

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次调用。

1 个答案:

答案 0 :(得分:1)

以相反的方式进行查询:

Book.joins(:reviews).where('book_author is not null')