如何在接收ActiveModel :: ForbiddenAttributesError时找到该属性

Sha*_*son 6 ruby-on-rails strong-parameters

使用strong_params并获取ActiveModel::ForbiddenAttributesError异常时,如何找出禁止的属性?我刚刚切换,attr_accessible调试消息通常很好,但切换到强params.

我收到此错误:

ActiveModel::ForbiddenAttributesError in SnippetsController#create
Run Code Online (Sandbox Code Playgroud)

这是一个嵌套模型.

def snip_params
  params.require(:snippet).permit(:content, :approved, :user_id, :book_id)
end
Run Code Online (Sandbox Code Playgroud)

在我用过的父母身上

has_nested_attributes :snippets
Run Code Online (Sandbox Code Playgroud)

创造

def create
  @snippet = @book.snippets.create(snip_params)
  @snippet.user = current_user
  if @snippet.save
    redirect_to @book
    flash[:success] = "Snippet submitted and awaiting approval."
  else
    flash[:base] = "Someone else has submitted a snippet, please try again later"
    redirect_to @book
  end
end
Run Code Online (Sandbox Code Playgroud)

参数内容:

{"utf8"=>"?",
 "authenticity_token"=>"bTRSwFRIhN3l3DkkWPtLzpoQHYD+CezmJQLw8Oz5+3g=",
 "snippet"=>{"content"=>"<p>AAAAAAAAAAAAA</p>\r\n"},
 "commit"=>"Create Snippet",
 "book_id"=>"1"}
Run Code Online (Sandbox Code Playgroud)

Sli*_*pan 2

所有属性一开始都是被禁止的。仅当您不允许任何属性时才会引发此异常。如果您允许某些参数而不允许其他参数,那么日志输出会告诉您哪些参数是不允许的。

 params = ActionController::Parameters.new(name: 'Bob', age: 24) 
 #params are usually set automatically in the controller
 Person.new(params)
Run Code Online (Sandbox Code Playgroud)

上面会引发异常

 Person.new(params.permit(:name))
Run Code Online (Sandbox Code Playgroud)

这将创建一个名为“Bob”的人,日志输出还将包含:

Unpermitted parameters: age
Run Code Online (Sandbox Code Playgroud)