Ruby on rails 如何在接收ActiveModel::ForbiddenAttribute错误时查找属性

Ruby on rails 如何在接收ActiveModel::ForbiddenAttribute错误时查找属性,ruby-on-rails,strong-parameters,Ruby On Rails,Strong Parameters,当使用强参数并获得ActiveModel::ForbiddenAttributesError异常时,如何找出哪个属性是禁止的?我刚刚从attr_accessible切换,调试消息通常很好,但在切换到强参数时不是这样 我收到这个错误: ActiveModel::ForbiddenAttributesError in SnippetsController#create 这是一个嵌套模型 def snip_params params.require(:snippet).permit(:conte

当使用强参数并获得
ActiveModel::ForbiddenAttributesError
异常时,如何找出哪个属性是禁止的?我刚刚从
attr_accessible
切换,调试消息通常很好,但在切换到强参数时不是这样

我收到这个错误:

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"}
{“utf8”=>“✓",
“真实性令牌”=>“BTRSWFRIHN3L3DKKWPLTLZPOQHYD+CezmJQLw8Oz5+3g=”,
“snippet”=>{“content”=>“aaaaaaaaaaa

\r\n”}, “提交”=>“创建代码段”, “图书id”=>“1”}
最初禁止所有属性。只有当您不允许任何属性时才会引发此异常。如果您允许某些属性而不允许其他属性,则日志输出会告诉您哪些参数不允许

 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

它们已登录到调试级别:

在我看来,您可以在带有参数列表的日志中看到一条警告。请不要重现该错误,我认为这与嵌套无关,因为您直接提供了属性。当您收到错误时,您能发布参数的内容吗?我很困惑。我唯一能获得该异常的方法是raise是通过不调用params散列上的permit来实现的。rails代码中唯一引发该异常的地方是我猜它没有看到.new(snip_params)。那么,问题是为什么?我建议从该函数调用中取出require/permit代码,并将其直接放入create调用中