у меня есть это в мой контроллер:Как сделать необязательный сильный ключ параметров, но все еще фильтровать параметры, вложенные в него?
params.require(:item).permit!
Давайте предположим, что этот Rspec спецификации:
put :update, id: @item.id, item: { name: "new name" }
Он работает, как и ожидалось, не ошибка. Однако, если я использую это:
put :update, id: @item.id, item: nil
я ActionController::ParameterMissing
, которые я не хочу, чтобы получить. Это связано с макросами диспетчера, которые я использую для других действий, и через которые я не могу контролировать отправленные параметры (макросы проверяют учетные данные пользователя, поэтому мне действительно неинтересно проверять действие #update
, а я просто тестирую before_filters для этого).
Так что мой вопрос: Как мне сделать params[:item]
необязательно, но все еще фильтровать атрибуты внутри него, если он присутствует?
Некоторые хорошие идеи на https://github.com/rails/rails/issues/9534. В принципе, рекомендуется использовать '# fetch' вместо' # require', поскольку у него есть второй параметр для значения по умолчанию, например: 'params.fetch (: item, {}). Allow!'. – mtjhax
@mtjhax awesome, thx! что было бы целесообразно вставить в ответ. – srecnig