2016-09-29 2 views
2

Я работаю в Ruby on Rails, и я пытаюсь разрешить все значения из хэша с помощью функции разрешения Ruby. Это кажется довольно простым, но я просто не могу заставить это работать. Я уже рассмотрел ссылки на разрешение и ответы на этот вопрос SO how to permit an array with strong parameters.Как разрешить все значения из хэша

Вот мой код

PERMITTED_PARAMS = [ 
    :OriginCity, 
    :OriginState, 
    { :PickupDates => {}} 
].freeze 
params = {"OriginCity"=>"Denver", "OriginState"=>"CO", "PickupDates"=>{"0"=>"2016-09-30"}} 
filtered_params = params.permit(PERMITTED_PARAMS) 

И результирующее значение для filtered_params является

{"OriginCity"=>"Denver", "PickupDates"=>{}} 

Хотя желаемое значение для filtered_params является

{"OriginCity"=>"Denver", "PickupDates"=>{"0":"2016-09-30"}} 

Любые советы о том, как для получения желаемое значение, изменив PERMITTED_PARAMS?

ответ

0

Вы хотите разрешить все значения в хеше, а не в массиве, который отличается от примера, с которым вы ссылались.

Попробуйте это:

PERMITTED_PARAMS = [ 
    :OriginCity, 
    :OriginState 
].freeze 
params = {"OriginCity"=>"Denver", "OriginState"=>"CO", "PickupDates"=>{"0"=>"2016-09-30"}} 
filtered_params = params.permit(PERMITTED_PARAMS).tap do |whitelisted| 
    whitelisted[:PickupDates] = params[:PickupDates] 
end 

Смотрите также: Strong parameters: allow hashes with unknown keys to be permitted

+0

': PickupDates => Params [: PickupDates] .try (: ключи)' может быть лучше, тогда вы сможете легко отфильтруйте ключи для вещей, которые соответствуют ожидаемым: ': PickupDates => params [: PickupDates] .try (: keys) .to_a.select {| k | Например, Integer (k) rescue nil}. Я не могу найти способ придавать сильным параметрам регулярное выражение для соответствия ключам, чтобы вы застряли, делая это вручную. –

+0

это работает - большое спасибо (и, согласен - хэш не массив)! – Craig

+0

Отлично! И да принятие всех параметров является немного разрешительным, но из коробки сильные параметры не делают для вас гораздо больше. Если вы заинтересованы, вы можете фильтровать только нужные вам ключи и т. Д., Но код будет усложняться ... –

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