레일에 매개변수가 있는지 테스트하는 방법
Ruby on Rails의 IF 문을 사용하여 요청 매개 변수가 설정되었는지 테스트하고 있습니다.두 파라미터의 설정 여부에 관계없이 블록이 트리거될 경우 다음의 첫 번째 부분이 표시됩니다.파라미터 [:1]과 파라미터 [:2]가 모두 설정된 경우에만 이 부품을 트리거하려면 어떻게 해야 합니까?
if (defined? params[:one]) && (defined? params[:two])
... do something ...
elsif (defined? params[:one])
... do something ...
end
원하는 항목:
if(params.has_key?(:one) && params.has_key?(:two))
확인 중입니다.if(params[:one])"거기 있지만 0" 및 "거기 있지만 거짓" 값에 속을 것이고 당신은 존재에 대해 묻는 것입니다.차별화가 필요할 수도 있습니다.
- 전혀 없습니다.
- 거기서 그러나
nil. - 거기서 그러나
false. - 빈 문자열만 있습니다.
뿐만 아니라.당신의 정확한 상황에 대한 더 자세한 설명 없이는 말하기 어렵습니다.
저는 의 팬입니다.
params[:one].present?
단지 그것이 그것을 유지하기 때문에.params[sym]읽기 쉽도록 형태를 만듭니다.
공백 사용?http://api.rubyonrails.org/classes/Object.html#method-i-blank-3F
unless params[:one].blank? && params[:two].blank?
비어 있거나 0인 경우 true가 반환됩니다.
또한... 부울 값을 테스트하는 경우에는 작동하지 않습니다.부터
>> false.blank?
=> true
그런 경우에 당신은 사용할 수 있습니다.
unless params[:one].to_s.blank? && params[:two].to_s.blank?
다음과 같이 보다 간결하게 작성할 수 있습니다.
required = [:one, :two, :three]
if required.all? {|k| params.has_key? k}
# here you know params has all the keys defined in required array
else
...
end
매우 간단합니다.
if !params[:one].nil? and !params[:two].nil?
#do something...
elsif !params[:one].nil?
#do something else...
elsif !params[:two].nil?
#do something extraordinary...
end
파라미터에 기본값을 제공하는 매우 간단한 방법:params[:foo] ||= 'default value'
if params[:one] && params[:two]
... do something ...
elsif params[:one]
... do something ...
end
다음 작업도 수행할 수 있습니다.
unless params.values_at(:one, :two, :three, :four).includes?(nil)
... excute code ..
end
저는 한두 개 이상의 param을 확인하고 싶을 때 위의 솔루션을 사용하는 경향이 있습니다.
.values_at은 정의되지 않은 매개 변수 키의 위치에 0이 있는 배열을 반환합니다. 즉,
some_hash = {x:3, y:5}
some_hash.values_at(:x, :random, :y}
다음을 반환합니다.
[3,nil,5]
그런 다음 배열에 0 값이 있는지 확인합니다.배열에 0이 포함된 경우 true가 반환됩니다.
경우에 따라 매개 변수에 잘못된 값의 문자열이 포함되어 있지 않은지 확인해야 할 수도 있습니다.
이러한 값은 unfe 문 위에 다음 코드를 추가하여 처리할 수 있습니다.
params.delete_if{|key,value| value.blank?}
전체적으로 보면 다음과 같습니다.
params.delete_if{|key,value| value.blank?}
unless params.values_at(:one, :two, :three, :four).includes?(nil)
... excute code ..
end
delete_if는 해시/파라미터를 수정하므로 주의하여 사용하십시오.
위의 솔루션은 설정하는 데 약간의 작업이 더 필요하지만 한두 개의 매개 변수 이상을 확인하는 경우에는 가치가 있습니다.
저는 방금 루비 인 레일즈 수업 http://api.rubyonrails.org/classes/Object.html#method-i-blank-3F 에서 이것을 읽었습니다.
사용할 수 있습니다.blank?와 동등한 방법params[:one].nil? || params[:one].empty?
(예:)
if params[:one].blank?
# do something if not exist
else
# do something if exist
end
이전 답변 외에 다음과 같은 답변이 있습니다.has_key?그리고.has_value?의 형태로 더 짧은 대안을 가지고 있습니다.key?그리고.value?Ruby 팀은 또한 짧은 대안을 사용할 것을 제안하지만, 가독성을 위해 일부는 여전히 이러한 방법의 긴 버전을 선호할 수 있습니다.
그러므로 당신의 경우에는 다음과 같은 것이 될 것입니다.
if params.key?(:one) && params.key?(:two)
... do something ...
elsif params.key?(:one)
... do something ...
end
NB!.key?키가 존재하는지만 확인하고 가능한 모든 값을 무시합니다.를 들어 다음과 같습니다.
2.3.3 :016 > a = {first: 1, second: nil, third: ''}
=> {:first=>1, :second=>nil, :third=>""}
2.3.3 :017 > puts "#{a.key?(:first)}, #{a.key?(:second)}, #{a.key?(:third), #{a.key?(:fourth)}}"
true, true, true, false
모든 매개 변수를 전환할 필요 없이 누락된 특정 매개 변수를 기반으로 오류를 반환하려면 다음을 수행합니다.
required_params = [:one, :two, :three]
required_params.each do |param|
if params.has_key?(param)
render json: { errors: "Missing parameter #{param.to_s}." }, :status => :bad_request
return
end
end
동일한 문제에 대해 이 문제를 정리했습니다.
before_filter :validate_params
private
def validate_params
return head :bad_request unless params_present?
end
def params_present?
Set.new(%w(one two three)) <= (Set.new(params.keys)) &&
params.values.all?
end
첫 번째 줄은 <= 하위 집합을 사용하여 대상 키가 매개 변수 키에 있는지 확인합니다.교환입니다.기본값당 블록이 없는 Enumerable.all? 값이 0이거나 거짓이면 false를 반환합니다.
제가 하는 일은 이렇습니다.
before_action :validate_presence
다음 방법을 사용합니다.
def check_presence
params[:param1].present? && params[:param2].present?
end
def validate_presence
if !check_presence
render json: {
error: {
message: "Bad Request, parameters missing.",
status: 500
}
}
end
end
if params[:one] && param[:two]
... excute code ..
end
파라미터[:2]를 사용하여 파라미터가 비어 있는지 확인할 수도 있습니다.
저는 늦게 시도하지만, 멀리서 보면 대답합니다.
해시의 값이 설정되어 있는지 여부를 확인하려면 위의 모든 항목이 해당 시점에 따라 참으로 답합니다.
하려면 (GET/POST...)의보다 더 .params[:one] 같은 것
if params[:one]~=/ / and params[:two]~=/[a-z]xy/
매개 변수(GET/POST)가 예상대로 맞지 않으면 설정되지 않은 것처럼 무시합니다.
한 저그if params[:one]제로 탐지 여부와 상관없이 해킹을 위해 페이지를 여는 것은 한 단계입니다. 왜냐하면 일반적으로 다음과 같은 것을 사용하는 것이기 때문입니다.select ... where params[:one] ...이것이 의도된 것인지 아닌지, 활성화된 것인지, 프레임워크 내 또는 프레임워크 후에 있는 것인지 여부.
대답이나 암시
언급URL : https://stackoverflow.com/questions/5629402/how-to-test-if-parameters-exist-in-rails
'codememo' 카테고리의 다른 글
| 앱에 대한 푸시 알림 설정 재설정 (0) | 2023.06.02 |
|---|---|
| 그룹화된 테이블 뷰 셀의 배경/경계 색상을 사용자 지정하는 방법은 무엇입니까? (0) | 2023.06.02 |
| Zure 연결 문자열 모범 사례 (0) | 2023.06.02 |
| 아이폰에서 "홈 화면에 추가"를 위한 자바스크립트? (0) | 2023.06.02 |
| Git의 단계별 변경에서 "이전 모드 100755 new mode 100644"라고 적힌 파일을 제거하려면 어떻게 해야 합니까? (0) | 2023.06.02 |