2016-09-29 3 views
2

Ruby on Rails에서 작업 중이며 Ruby의 허가 함수를 사용하여 해시의 모든 값을 허용하려고합니다. 그것은 오히려 간단 해 보이지만, 나는 이것을 작동시키지 못합니다. 나는 허가에 대한 참조를 이미 검토했고,이 SO 질문에 대한 대답은 how to permit an array with strong parameters이다. filtered_params에 대해 원하는 값을 구하는 방법에 대한 조언을해시에서 모든 값을 허용하는 방법

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

동안

여기 내 코드의

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"=>{}} 

입니다 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

좋아요! 모든 매개 변수를 허용하는 예는 약간 관대하지만 강력한 매개 변수를 사용하면 더 많은 것을 할 수 없습니다. 관심이 있다면 원하는 키만 필터링 할 수 있지만 코드가 복잡해집니다 ... –

관련 문제