【问题标题】:undefined method `permit' for nil:NilClassnil:NilClass 的未定义方法“permit”
【发布时间】:2015-10-01 19:45:36
【问题描述】:

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

我的 cmets 控制器 ::

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

// cmets 的表单 ///

  <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))

请指出我错在哪里..

一次编辑 :: 我的实际错误声明 ::

NoMethodError in CommentsController#create

【问题讨论】:

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


    【解决方案1】:

    使用强参数的正确语法是

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

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

    所以你应该使用

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

    【讨论】:

      【解决方案2】:

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

      您应该使用params.require(:comments).permit(:commenter, :body),这样如果comments 不存在,它就不会继续前进。

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

      【讨论】:

      • thanx @sevenseacat :: 但请告诉我你是怎么得到这个的..我是rails新手.. p.s. - 它现在工作..
      • @user3322822 它是 Rails 入门指南的一部分 - guides.rubyonrails.org/…
      猜你喜欢
      • 1970-01-01
      • 2017-05-11
      • 1970-01-01
      • 2011-07-27
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多