Ruby on rails Rails:在当前Desive用户的评论中插入';创造
我已经远离编程八个月了,我正试图重新学习我对开发Rails应用程序所知甚少的东西 在尝试创造一些原创的东西之前,我重新做了一次尝试,以帮助自己恢复速度(想象一只乌龟) 我能够成功地进入测试应用程序以及 现在我尝试实现用户对帖子和评论的所有权。对于POST,我运行以下命令:Ruby on rails Rails:在当前Desive用户的评论中插入';创造,ruby-on-rails,ruby,parameters,devise,Ruby On Rails,Ruby,Parameters,Devise,我已经远离编程八个月了,我正试图重新学习我对开发Rails应用程序所知甚少的东西 在尝试创造一些原创的东西之前,我重新做了一次尝试,以帮助自己恢复速度(想象一只乌龟) 我能够成功地进入测试应用程序以及 现在我尝试实现用户对帖子和评论的所有权。对于POST,我运行以下命令: rails g migration AddUserToPosts user:references 类似的评论。容易的。将当前用户添加到新帖子很容易,只需在Posts控制器中添加一行,因为我可以在实例化和保存之间进行操作:
rails g migration AddUserToPosts user:references
类似的评论。容易的。将当前用户添加到新帖子很容易,只需在Posts控制器中添加一行,因为我可以在实例化和保存之间进行操作:
def create
@post = Post.new(post_params)
@post.user = current_user #new
if @post.save
redirect_to @post
else
render 'new'
end
end
但对于评论,我感到困惑。以下是我在评论控制器中看到的内容:
def create
@post = Post.find(params[:post_id])
@comment = @post.comments.create(params[:comment].permit(:commenter, :body))
#@comment.user = current_user
redirect_to post_path(@post)
end
我想以某种方式强迫我的用户加入到评论创建中。注释掉的尝试没有破坏工作,但也没有做任何事情,因为注释被保存到正在调用的.create方法中的数据库中
是的,所有这些都是为了问一个非常简单的问题。提前感谢您的耐心等待 使用
.new
而不是.create
,然后使用@comment.save
手动保存对象
我建议您切换到
.new
的原因是它只会在内存中创建对象。它不会尝试访问数据库。如果使用.create
然后使用.save
,则会两次命中数据库。这会有点低效。问题在于,在第二个示例中,您调用的是create
,而不是new
创建
=新建
+保存
在分配当前用户之前,您正在保存注释
您可以首先使用new
并仅在分配当前用户后进行保存来解决此问题:
@post = Post.find(params[:post_id])
@comment = @post.comments.new(params[:comment].permit(:commenter, :body))
@comment.user = current_user
@comment.save
另外,在您的第一个示例中,有一种更好的方法可以创建帖子:
@post = current_user.posts.new(post_params)
if @post.save
...
我确实改变了创建帖子的更好的方式(好吧,一行!)。这对我来说没有意义,但如果我想到用户有帖子,那么它就有意义了,通过用户调用“makeanewpost”会自动生成我需要的关联。这也是评论中发生的事情。。。通过一篇帖子发表评论也会让协会感到惊讶,这是有道理的。