【发布时间】:2014-08-19 16:32:57
【问题描述】:
我是 Rails 新手。我正在构建我的第一个应用程序 - 简单的博客。我有用户和帖子模型,每个用户可以写很多帖子。现在我想添加评论模型,其中每个帖子可以有许多 cmets,并且每个用户都可以评论任何其他用户创建的任何帖子。
在评论模型中我有
id\body\user_id\post_id
列。
模型关联:
user.rb
has_many :posts, dependent: :destroy
has_many :comments
post.rb
has_many :comments, dependent: :destroy
belongs_to :user
comment.rb
belongs_to :user
belongs_to :post
那么如何在 CommentsController 中正确定义创建操作? 谢谢。
更新:
路线.rb
resources :posts do
resources :comments
end
cmets_controller.rb
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(comment_params)
if @comment.save
redirect_to @post
else
flash.now[:danger] = "error"
end
end
结果是
--- !ruby/hash:ActionController::Parameters
utf8: ✓
authenticity_token: rDjSn1FW3lSBlx9o/pf4yoxlg3s74SziayHdi3WAwMs=
comment: !ruby/hash:ActionController::Parameters
body: test
action: create
controller: comments
post_id: '57'
正如我们所见,它不发送 user_id 并且仅当我从 comment.rb 中删除 validates :user_id, presence: true 字符串时才有效
有什么建议吗?
【问题讨论】:
-
首先,您实际上并不需要直接将 cmets 与用户关联。您可以通过帖子将它们间接关联到用户。然后,评论绑定到@post...所以@post.cmets.create(comment_params)...
-
@RubyRacer 那么如何定义@post?我尝试过这样的
@post = Post.find(params[:id]) @comment = @post.comments.create(comment_params),但收到错误“找不到没有 ID 的帖子” -
您应该阅读一些有关路由和嵌套资源的信息。这样做,到处玩(因为你正在学习),当你自己做不到的时候回到这里。
标签: ruby-on-rails ruby ruby-on-rails-4