Я использую полиморфные ассоциации для отслеживания комментариев в моем проекте. Все очень прямо вперед.
Проблема, которую я имею, заключается в запросе на основе полиморфной ассоциации и присоединении от модели Comment обратно к ее владельцу.
Итак...
У меня есть модель комментария
class Comment < ActiveRecord::Base
belongs_to :commentable, :polymorphic => true
end
И режим ForumTopics:
class ForumTopic < ActiveRecord::Base
has_many :comments, :as => :commentable
end
У меня есть несколько других "замечательных" моделей, которые сейчас не важны. Все это работает.
То, что я пытаюсь сделать, это найти все комментарии, относящиеся к ForumTopic с заданным условием (в данном случае "featured" == true).
Когда я пытаюсь использовать поисковик для присоединения к моделям:
@comments = Comment.find(:all
:joins => :commentable
:conditions => ["forum_topics.featured = ? ", true]
)
Я получаю следующую ошибку:
Невозможно с нетерпением загрузить полиморфную ассоциацию: комментарий
Использование синтаксиса AR "include":
@comments = Comment.find(:all
:include => :forum_topics
:conditions => ["forum_topics.featured = ? ", true]
)
возвращает:
Ассоциация с именем "forum_topics" не найдена; возможно, вы его опечалили?
Если я попытаюсь присоединиться к имени таблицы вместо имени ассоциации (строка вместо символа):
@comments = Comment.find(:all,
:joins => "forum_topics",
:conditions => ["forum_topics.featured = ? ", true]
)
Я вижу:
Mysql:: Ошибка: Неизвестные таблицы 'comments': комментарии SELECT. FROM comments forum_topics WHERE (forum_topics.featured = 1) *
(Здесь вы можете видеть, что синтаксис базового запроса полностью отключен и соединение вообще отсутствует).
Не уверен, что то, что я делаю, даже возможно, и есть другие способы достижения требуемого результата, но похоже, что это должно быть выполнимо.
Любые идеи? Что-нибудь мне не хватает?