gpt4 book ai didi

ruby-on-rails - has_many_polymorphs 中的冲突关联

转载 作者:行者123 更新时间:2023-12-04 06:24:58 28 4
gpt4 key购买 nike

我正在使用 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 :stories 和 :has_many :stories 到 :favorites。

当我尝试调用@user.stories 或@user.comments 时出现问题。我想为他们拥有的故事调用@user.stories,为他们喜欢的故事调用@user.favorites.stories。

所以我尝试了这个:

class User < ActiveRecord::Base
has_many :stories
has_many :comments

has_many_polymorphs :favorites, :from => [:favorite_stories, :favorite_comments]
end

然后像这样子类化故事和评论:

class FavoriteStory < Story
end

class FavoriteComment < Comment
end

这解决了问题,因为现在我可以调用@user.stories 和@user.favorite_stories。

但是 当我在引用评论时遇到此错误:

ActiveRecord::Associations::PolymorphicError in 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.

我在 similar context 中找到了对这个错误的讨论,但它没有回答我的问题。

这是怎么回事?我怎样才能做得更好?

最佳答案

像这样的东西怎么样?

class UserFavorite < ActiveRecord::Base
belongs_to :user
belongs_to :favorite, :polymorphic => true
end

class User < ActiveRecord::Base
has_many :favourite_story_items, :class_name => "UserFavourite", :conditions => "type = 'Story'"
has_many :favourite_stories, :through => :favourite_story_items, :as => :favourite
has_many :favourite_comment_items, :class_name => "UserFavourite", :conditions => "type = 'Comment'"
has_many :favourite_comments, :through => :favourite_comment_items, :as => :favourite
end

关于ruby-on-rails - has_many_polymorphs 中的冲突关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4746825/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com