ruby-on-rails 用户/帖子/评论的Rails关联

hgqdbh6s  于 2023-04-13  发布在  Ruby
关注(0)|答案(2)|浏览(156)

我试图创建一个像博客的应用程序,有3个模型:用户、帖子和评论。正如预期的那样,评论既属于用户,也属于帖子。
我使用了以下关联:
User.rb

has_many :comments
has_many :posts

Post.rb

has_many :comments
belongs_to :user

Comment.rb

belongs_to :user
belongs_to :post

我尝试使用以下方法创建注解:@user.comments.create
然而,这将与用户的评论,但不与后。我希望评论与用户和后。有没有办法做到这一点?或者我使用了错误的协会?
我认为手动设置user_id或post_id可能是一个不好的做法,因此这两个id都不在attr_accessible中。我不确定它是否正确。
谢谢大家!

nszi6y05

nszi6y051#

您不需要特别设置post_id,可以尝试@user.comments.create(:post => @post)

voj3qocg

voj3qocg2#

如果注解需要与多个模型关联,我们称之为polymorphic association。你可以看看has_many_polymorphs插件。我假设你使用的是rails 3,你可以尝试以下操作:
您可以在lib/commentable.rb文件夹中定义模块,如下所示:

module Commentable
    def self.included(base)
        base.class_eval do
            has_many :comments, :as => commentable
        end
    end
end

在Comment模型中,您应该说它是多态的:

belongs_to :commentable, :polymorphic => true

在Post和User模型中,您可以添加以下内容:

has_many :comments, :as => :commentable, :dependent => :delete_all

因为在Rails 3中,lib文件夹在默认情况下是不加载的,所以你应该让Rails在你的应用程序中加载它。

config.autoload_paths += %W(#{config.root}/lib)

现在,Comment是多态的,任何其他模型都可以与之关联。

相关问题