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)
所有属性一开始都是被禁止的。仅当您不允许任何属性时才会引发此异常。如果您允许某些参数而不允许其他参数,那么日志输出会告诉您哪些参数是不允许的。
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)
| 归档时间: |
|
| 查看次数: |
1651 次 |
| 最近记录: |