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调用中