У меня есть связь между моделями, которая является полиморфной.
Пример:
class Review
belongs_to :review_subject, :polymorphic => true
end
Однако я хотел бы позвонить по этому вопросу:Ассоциация review_subject, где я знаю, что все результаты будут определенного типа.
В моем случае я хочу сделать это, чтобы я мог присоединиться к 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
, которая не является полиморфной и может вызываться только в этомситуация.Тем не менее, это уродливый хак как в модели, так и в том, что он также пропускает вызовы include
, если только представления не ссылаются на review_subject_books_only обзора.