Ruby on rails模型与多个父母

时间:2009-08-01 17:54:54

标签: ruby-on-rails ruby activerecord

在我的Rails应用程序中,我有两个模型,文章和项目,它们都与用户相关联。我想为每个模型添加注释。构建这个的最佳方法是什么?

这是我目前的设置:

class Comment < ActiveRecord::Base
  belongs_to :article
  belongs_to :project
end

class Article < ActiveRecord::Base
  belongs_to :user
  has_many :comments
end

class Project < ActiveRecord::Base
  belongs_to :user
  has_many :comments
end

class User < ActiveRecord::Base
  has_many :articles
  has_many :projects
  has_many :comments, :through => :articles
  has_many :comments, :through => :projects
end 

这是处理结构的正确方法吗?如果是这样,我如何管理CommentsController,如果它是通过文章创建的,则为article_id;如果是通过项目创建的,则为project_id?我应该设置特殊路线吗?

最后一条评论:评论并不总是需要有用户。因为这对我的网站来说,我希望匿名观众能够发表评论。这是一项微不足道的任务吗?

3 个答案:

答案 0 :(得分:5)

使Comment成为多态模型。然后创建一个多态关联。

以下是来自Rails wiki的polymorphic relationship示例,此处是来自截屏广播员Ryan Bates的Railscast

答案 1 :(得分:1)

您可以查看 - acts_as_commentable插件http://github.com/jackdempsey/acts_as_commentable/tree/master

或者你可以继续进行多态关系

答案 2 :(得分:-1)

你可以让ArticleCommentProjectComment具有相似的结构但是分开存储,然后创建一个返回两种评论类型的方法。