2014-09-29 2 views
1

У меня проблема с массовым назначением для вложенных атрибутов. У меня есть хэш в params, который представляет объект, который получается из формы form_for.Rails - массовое присвоение ForbiddenAttributesError для вложенного атрибута

Я пытался санкционировать Params, как это, но я получаю следующее сообщение об ошибке ...

ActiveModel :: ForbiddenAttributesError

для

params.require(:country).permit(:language, :flag_path) 
@country.update(params[:country]) 

Вот это массив PARAMS :

{"utf8"=>"✓", 
"authenticity_token"=>"xxxxxxx", 
"country"=>{"language"=>"xxxx", 
"flag_path"=>"xxxxx"}, 
"commit"=>"Update", 
"country_id"=>"xxxx"} 

Спасибо за помощь.

EDIT: Я знаю, что это возможно для пользователя permit!, но если я правильно понимаю, это разрешает все параметры для источника информации, и я бы хотел разрешить только некоторые из них.

+0

Можете ли вы показать код CountriesController? – RedZagogulin

ответ

3

Есть две проблемы в вашем коде:

первая: Рассмотрим, если ниже ваше разрешение метода парам в контроллере:

def country_param 
    params.require(:country).permit(:language, :flag_path) 
end 

тогда ваше действие обновление должно быть так:

@country.update(country_param) 

не

@country.update(params[:country]) 

2nd: Почему у вас есть country_id в вашем действии обновления. Вместо этого оно должно быть id. Это не большой, оба будут работать. Но с country_id Вы не достигнете правильного действия редактирования.

В любом случае в соответствии с вашими Params ваши действия должны быть выглядеть следующим образом:

def update 
    @country = Country.find(params[:country_id]) 
    @country.update(country_param) 
end 

private 

    def country_param 
    params.require(:country).permit(:language, :flag_path) 
    end 
+0

Кажется, я не понял разрешения. Теперь я это делаю. Единственное, что я не понимаю, это id вещь ... – Aeradriel

+0

Привет, Dipak, Нужно ли нам, если у меня его нет, и также я должен разрешить с хешем, например: много ключей => значение, например, http : //stackoverflow.com/q/43463680/3528013 Thk. –

0

Что вы делаете с params.require(:country).permit, это правильный способ сделать это. ActiveModel::ForbiddenAttributesError будет поднят, если какой-либо из параметров не будет разрешен, поэтому вполне вероятно, что вы упустили один из параметров.

Проверьте все параметры в вашем параметре hash и убедитесь, что они разрешены, похоже, что commit и contry_id отсутствуют, например.

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