2013-04-26 1 views
5

Можно ли пометить один атрибут хеша по мере необходимости с использованием сильных параметров?Сильные параметры, требующие атрибута

Учитывая вход как:

{ 
    "example" => { 
    "optional": 1234, 
    "required": 5678 
    } 
} 

Стандартные примеры сильных PARAMS являются:

params.require(:example).permit(:optional, :required)

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

params.require(:example).require(:required) 
params.require(:example).permit(:optional) 

Я попытался:

params.require(:example => [ :required ]).permit(:optional) 
params.require(:example).permit(:optional) 
params[:example].require(:required) 

И все, что я могу придумать.

Кто-нибудь знает, если это возможно?

ответ

5

Greg!

У меня был тот же вопрос, но в конце концов я нашел, что его не соответствующий вопрос.

Посмотрите, вот исходный код требует метода в strong_parameters перл:

def require(key) 
    self[key].presence || raise(ActionController::ParameterMissing.new(key)) 
end 

Так, в принципе, нет никакого способа, чтобы требовать «необходимый» атрибут в Params хэш. Но посмотрите на это с разных сторон. Я думаю, что лучше написать свой собственный метод, чтобы сделать это. Поскольку я использую рельсы, я просто добавил validates_presence_of к модели. Если вы хотите сделать его динамичным, вы можете создать собственную проверку. Вы можете найти документацию здесь:

http://guides.rubyonrails.org/v3.2.13/active_record_validations_callbacks.html#performing-custom-validations

+0

Thanks RunFor. Я пришел к такому же выводу. В моем случае требование присутствия зависит от способа доступа к ресурсу (т. Е. Через контроллер), но я смог выполнить некоторую условную проверку, чтобы помочь с этим. –

0

Что вы можете сделать, это использовать

def example_params 
    params.require(:example) 
    params[:example].require(:required) 
    params.require(:example).permit(:required, :optional) 
end 

Первая строка завершается неудачей, если :example отсутствует. Вторая строка не работает, если :required отсутствует в :example. Третья строка возвращает то, что вы ожидаете, позволяя :optional.

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

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