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

时间:2013-11-29 13:42:43

标签: ruby-on-rails strong-parameters

使用strong_params并获得ActiveModel::ForbiddenAttributesError异常时,如何找出被禁止的属性?我刚刚从attr_accessible切换,调试消息通常非常好,但切换到强params时没有。

我收到此错误:

ActiveModel::ForbiddenAttributesError in SnippetsController#create

这是一个嵌套模型。

def snip_params
  params.require(:snippet).permit(:content, :approved, :user_id, :book_id)
end

在我使用的父母中

has_nested_attributes :snippets

创建

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

参数内容:

{"utf8"=>"✓",
 "authenticity_token"=>"bTRSwFRIhN3l3DkkWPtLzpoQHYD+CezmJQLw8Oz5+3g=",
 "snippet"=>{"content"=>"<p>AAAAAAAAAAAAA</p>\r\n"},
 "commit"=>"Create Snippet",
 "book_id"=>"1"}

2 个答案:

答案 0 :(得分:2)

最初禁止所有属性。仅当您不允许任何属性时才会引发此异常。如果您允许某些而不允许其他人,则日志输出会告诉您哪些参数不被允许。

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

以上将引发异常

 Person.new(params.permit(:name))

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

Unpermitted parameters: age

答案 1 :(得分:0)