未定义的方法`permit'为零:NilClass

时间:2014-03-28 06:15:02

标签: ruby-on-rails ruby-on-rails-4

当我创建与帖子相关的评论时,我收到此错误::

我的评论控制器::

class CommentsController < ApplicationController
    def new
        @comments = Comment.new
    end

    def create 
        @post = Post.find (params[:post_id])    
        @comments = @post.comments.create(params[:comments].permit(:commenter, :body))
        redirect_to post_path(@post)
    end
end

//评论的表格///

  <strong>Title:</strong>
  <%= @post.Title %>
</p>

<p>
  <strong>Text:</strong>
  <%= @post.Text %>
</p>

<%= form_for([@post, @post.comments.build]) do |f| %>

<p>
    <%= f.label :commenter %><br />
    <%= f.text_field :commenter %>
  </p>
  <p>
    <%= f.label :body %><br />
    <%= f.text_area :body %>
  </p>
  <p>
    <%= f.submit %>
  </p>
<% end %>

我在这一行收到错误::

@comments = @post.comments.create(params[:comments].permit(:commenter, :body))

请指出我错在哪里..

一次编辑::我的实际错误陈述::

CommentsController中的NoMethodError #create

2 个答案:

答案 0 :(得分:3)

使用强参数的正确语法是

params.require(:comments).permit(:commenter, :body)

但我认为params将包含comment而不是comments

所以你应该使用

params.require(:comment).permit(:commenter, :body)

答案 1 :(得分:2)

好吧,正如错误消息所述,params[:comments]为零。

您应该使用params.require(:comments).permit(:commenter, :body),以便在comments不存在的情况下,它将不再继续使用。

此外,提交的实际参数是comment,而不是comments。您可以通过查看日志中提交的参数来验证这一点。