2013-11-29 2 views
6

При использовании strong_params и получении исключения ActiveModel::ForbiddenAttributesError, как узнать, какой атрибут запрещен? Я только что переключился с attr_accessible, и отладочное сообщение обычно было довольно хорошим, но не при переключении на сильные параметры.Как найти атрибут при получении ActiveModel :: ForbiddenAttributesError

Я получаю эту ошибку:

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 

Params Содержание:

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

Мне кажется, вы можете увидеть предупреждение в журнале со списком параметров – gotva

ответ

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 
+0

см. Обновление к моему вопросу. –

+0

не может воспроизвести эту ошибку, я не думаю, что она связана с вложением, поскольку вы предоставляете атрибуты напрямую. Можете ли вы опубликовать содержимое содержимого параметров, когда вы получите сообщение об ошибке? – Slicedpan

+0

Я обновил вопрос. –

Смежные вопросы