我试图创建一个像博客的应用程序,有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条答案
按热度按时间nszi6y051#
您不需要特别设置
post_id
,可以尝试@user.comments.create(:post => @post)
。voj3qocg2#
如果注解需要与多个模型关联,我们称之为
polymorphic association
。你可以看看has_many_polymorphs
插件。我假设你使用的是rails 3,你可以尝试以下操作:您可以在
lib/commentable.rb
文件夹中定义模块,如下所示:在Comment模型中,您应该说它是多态的:
在Post和User模型中,您可以添加以下内容:
因为在Rails 3中,lib文件夹在默认情况下是不加载的,所以你应该让Rails在你的应用程序中加载它。
现在,Comment是多态的,任何其他模型都可以与之关联。