Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails:在当前Desive用户的评论中插入';创造_Ruby On Rails_Ruby_Parameters_Devise - Fatal编程技术网

Ruby on rails Rails:在当前Desive用户的评论中插入';创造

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应用程序所知甚少的东西

在尝试创造一些原创的东西之前,我重新做了一次尝试,以帮助自己恢复速度(想象一只乌龟)

我能够成功地进入测试应用程序以及

现在我尝试实现用户对帖子和评论的所有权。对于POST,我运行以下命令:

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”会自动生成我需要的关联。这也是评论中发生的事情。。。通过一篇帖子发表评论也会让协会感到惊讶,这是有道理的。