Rails用户/帖子/评论的关联

时间:2011-02-07 06:58:01

标签: ruby-on-rails

我正在尝试创建一个类似博客的应用,包含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中。我不确定它是否正确。

谢谢!

2 个答案:

答案 0 :(得分:3)

具体而言,您无需设置post_id。试试@user.comments.create(:post => @post)

答案 1 :(得分:0)

如果评论需要与多个模型相关联,我们称之为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

在评论模型中,你应该说它是多态的:

belongs_to :commentable, :polymorphic => true

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

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

因为在Rails 3中,默认情况下不会加载lib文件夹,所以应该让Rails在你的application.rb中加载它:

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

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