Я использую has_many_polymorphs для создания функции «Избранное» на сайте, где несколько пользователей могут публиковать истории и оставлять комментарии.Я хочу, чтобы пользователи могли "любимые" истории и комментарии.
class User < ActiveRecord::Base
has_many :stories
has_many :comments
has_many_polymorphs :favorites, :from => [:stories, :comments]
end
class Story < ActiveRecord::Base
belongs_to :user, :counter_cache => true
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :user, :counter_cache => true
belongs_to :story, :counter_cache => true
end
class FavoritesUser < ActiveRecord::Base
belongs_to :user
belongs_to :favorite, :polymorphic => true
end
Теперь, скажем, @user пишет историю.Теперь @ user.stories.size = 1. Затем @user добавляет другую историю в избранное.Теперь @ user.stories ... подожди минутку.@user has_many: сюжеты и: has_many: сюжеты через: избранное.
Проблема возникает, когда я пытаюсь позвонить @ user.stories или @ user.comments.Я хочу назвать @ user.stories для историй, которые им принадлежат, и @ user.flected.stories для историй, которые они любят.
Итак, я попробовал это:
class User < ActiveRecord::Base
has_many :stories
has_many :comments
has_many_polymorphs :favorites, :from => [:favorite_stories, :favorite_comments]
end
, а затем подклассы Story and Commentвот так:
class FavoriteStory < Story
end
class FavoriteComment < Comment
end
Это решило проблему, потому что теперь я могу вызывать @ user.stories и @ user.favorite_stories.
НО , когда я получаю эту ошибку вссылка на комментарии:
ActiveRecord :: Associates :: PolymorphicError в UsersController # show
Could not find a valid class for :favorite_comments (tried FavoriteComment). If it's namespaced, be sure to specify it as :"module/favorite_comments" instead.
Я нашел обсуждение этой ошибки в аналогичном контексте , но это не отвечает на мой вопрос.
Что здесь происходит?Как я могу сделать это лучше?