반응형
Ruby on Rails : 여러 해시 키 삭제
나는 종종이 글을 쓰고있다 :
params.delete(:controller)
params.delete(:action)
params.delete(:other_key)
redirect_to my_path(params)
삭제의 흔적은 옳지 않다고 느끼지 않습니다.
[:controller, :action, :other_key].each do |k|
params.delete(k)
end
더 간단하고 깨끗한 것이 있습니까?
ActiveSupport가 해시에 추가 하는 Hash # except 메서드를 모르는 것 같습니다 .
코드를 다음과 같이 단순화 할 수 있습니다.
redirect_to my_path(params.except(:controller, :action, :other_key))
또한 Rails 팀이 자동으로 패치했기 때문에 원숭이 패치가 필요하지 않습니다!
사용하면 Hash#except
문제가 해결 되지만 잠재적 인 보안 문제가 발생할 수 있습니다 . 방문자의 데이터를 처리하는 데 유용한 경험 법은 화이트리스트 방식을 사용하는 것입니다. 이 경우 Hash#slice
대신 사용하십시오.
params.slice!(:param_to_remove_1, :param_to_remove_2)
redirect_to my_path(params)
귀하의 질문에 원래 게시 한 코드에 완전히 만족합니다.
[:controller, :action, :other_key].each { |k| params.delete(k) }
dmathieu의 대답을 표현하는 또 다른 방법은
params.delete_if { |k,v| [:controller, :action, :other_key].include? k }
원숭이 패치를 발사?
class Hash
def delete_keys!(*keys)
keys.flatten.each do |k|
delete(k)
end
self
end
def delete_keys(*keys)
_dup = dup
keys.flatten.each do |k|
_dup.delete(k)
end
_dup
end
end
제안한 솔루션에 어떤 문제가 있다고 생각하는지 모르겠습니다. delete_all
해시 또는 다른 방법 을 원한다고 가정하십시오 . 그렇다면 tadman의 답변 이 해결책을 제공합니다. 그러나 솔직히 말해서, 귀하의 솔루션은 매우 쉽게 따라갈 수 있다고 생각합니다. 이것을 자주 사용하는 경우 도우미 방법으로 마무리해야 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/1560572/ruby-on-rails-delete-multiple-hash-keys
반응형
'IT박스' 카테고리의 다른 글
stdin에 문자열 보내기 (0) | 2020.06.16 |
---|---|
자격 증명을 사용하여 트러스트되지 않은 원격 도메인에서 공유 파일 (UNC)에 액세스 (0) | 2020.06.16 |
Javascript에서 여러 변수를 동일한 값에 할당 (0) | 2020.06.16 |
테스트 할 문자열 목록으로 str.starts (0) | 2020.06.16 |
Postman의 API에서 Excel (.xls) 파일을 다운로드하는 방법은 무엇입니까? (0) | 2020.06.16 |