有没有办法可以创建属于其他两个模型的模型的对象,例如,如果我有许多帖子的用户,然后帖子可以有很多评论和评论属于用户和帖子。如果我做post.comments.create()它只关联post与评论,如果我做user.comments.create()然后它将关联用户。如果我想将两者都与评论相关联,那么方法是什么。我知道我可以使用多态关联但是还有其他方法吗?
答案 0 :(得分:3)
首先,当您谈论关联时,您必须记住我们build
而不是create
。一个非常简单的方法来做你需要的是
class Comment < ActiveRecord::Base
belongs_to :user
end
并且不要忘记在User中添加关系的另一面:
class User < ActiveRecord::Base
has_many :comments
end
现在,我知道你必须在评论表中创建一个字段user_id。如果没有,则需要通过此迁移添加它。
rails g migration add_user_id_to_comments user_id:string
现在执行rake db:migrate
或者更好的方法。
在创建模型注释时,您可以添加用户:迁移行中的引用,如此
rails g model Comment text:string post:references user:references
以这种方式,关系的一侧将自动添加到模型中,user_id和post_id字段也将自动添加到您的注释表中。
回到你的问题。 如果您没有找到其他类似的方式,请在隐藏字段中传递用户ID:
<%= hidden_field_tag "userid", current_user.id%>
我希望你有当前的用户定义。 现在你可以在像这样的评论的控制器中接受这个
If params[:userid]
user_id = params[:userid]
end
您可以在注释控制器的创建操作中的保存功能之前包含它。
希望这有帮助
干杯!
答案 1 :(得分:2)
您可以对两个模型使用belongs_to。唯一的区别是,在创建评论时,您必须明确提及您未创建的模型的ID。我举一个例子:
class Comment
belongs_to :user
belongs_to :post
end
comment = post.comments.create(user_id: some_user_id)
由于我通过帖子评论关系创建了评论,因此帖子ID会自动插入到评论的post_id
属性中。我特别提到user_id
,以便comment.user
将返回ID为some_user_id
的用户。
创建注释时,要使用params
哈希中的注释属性,请使用以下命令:
comment = post.comments.build(params[:comment])
comment.user_id = some_user_id
comment.save
答案 2 :(得分:0)
创建像这样的评论可能更直观:
comment = Comment.create(user_id:user-you-want-to-associate.id,post_id:post-you-want-to-associate.id)