[ruby-on-rails] 레일에 매개 변수가 있는지 테스트하는 방법

Ruby on Rails의 IF 문을 사용하여 요청 매개 변수가 설정되어 있는지 테스트하고 있습니다. 두 매개 변수의 설정 여부에 관계없이 다음 if 블록의 첫 번째 부분이 트리거됩니다. params [: one]과 params [: two]가 모두 설정된 경우이 부분 만 트리거되도록하려면 어떻게해야합니까?

if (defined? params[:one]) && (defined? params[:two])
 ... do something ...
elsif (defined? params[:one])
 ... do something ...
end



답변

당신이 원하는 has_key?:

if(params.has_key?(:one) && params.has_key?(:two))

확인 만하면 if(params[:one])“없음은 있지만”및 “거짓은 있지만”값에 속아서 존재 여부를 묻습니다. 차별화해야 할 수도 있습니다.

  • 전혀 없습니다.
  • 하지만 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?

비어 있거나 nil이면 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


답변

if params[:one] && params[:two]
 ... do something ...
elsif params[:one]
 ... do something ...
end


답변

매개 변수에 기본값을 제공하는 매우 간단한 방법 : params[:foo] ||= 'default value'