2016-01-05 1 views
0

В одном из моих контроллеров у меня есть следующие строки:Обязательный параметр в контроллере Rails является ложным и бросает ошибку

params.require(:advertiser).permit(:price) 

Если я пытаюсь отправить форму для этого контроллера через мой передний конец и без рекламодателя пары, param выглядит следующим образом:

{"advertiser"=>false, "controller"=>"advertisers", "action"=>"create"} 

С рекламодатель является ложной, я получаю сообщение об ошибке:

 NoMethodError: 
     undefined method `permit' for false:FalseClass 

Что мне нужно сделать, чтобы на моем интерфейсе отображалась ошибка, а не исключение?

ответ

0

Для того, чтобы позвонить permit после require(:advertiser), значение, возвращаемое require(:advertiser) должно быть хэш. Здесь у вас есть значение false, что означает, что вы вызываете

false.permit(:price) 

но permit не определен на FalseClass, он определен на Hash.

require implementation проверяет наличие ценности. Однако false считается допустимым значением, поэтому оно возвращается и метод не поднимается.

Если params[:advertiser] предполагается хранить Хэш, то это странно, что он содержит false. Если объект не указан, он должен содержать nil, а не false. Вероятно, у вас есть плохая конфигурация.

Правильный подход заключается в фиксации вида. Однако, если по какой-либо причине false здесь правильное значение, вы должны проверить, является ли значение ложным до вызова permit.

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

  • Нет связанных вопросов^_^