Estoy usando una declaración IF en Ruby on Rails para probar y probar si los parámetros de solicitud están establecidos. Independientemente de si ambos parámetros están configurados o no, la primera parte de lo siguiente si se activa el bloque. ¿Cómo puedo hacer que esta parte SOLO se active si ambos parámetros [: uno] y parámetros [: dos] están configurados?
if (defined? params[:one]) && (defined? params[:two])
... do something ...
elsif (defined? params[:one])
... do something ...
end
ruby-on-rails
ruby
Darren
fuente
fuente
params
es un método de controlador Rails (que resulta que devuelve un HashWithIndifferentAccess), se trata de Rails.Respuestas:
Tu quieres
has_key?
:Solo la comprobación se
if(params[:one])
dejará engañar por un valor "allí pero nulo" y "allí pero falso" y se preguntará acerca de la existencia. Es posible que deba diferenciar:nil
.false
.también. Difícil de decir sin más detalles de su situación precisa.
fuente
nil
parámetro. Si el parámetro existe, será una cadena vacía.params
no haya sido preprocesado antes de llegar a donde estamos revisando lo que contiene. De ahí mi lista de posibles casos especiales para verificar. Lo mejor es decir exactamente lo que quieres decir en mi humilde opinión.key?
método. edgeapi.rubyonrails.org/classes/ActionController/…params.to_h.key?
por ahora.soy un fan de
params[:one].present?
Solo porque mantiene el
params[sym]
formulario para que sea más fácil de leer.fuente
has_key
en cambio te da lo que estás buscando.utilizar en blanco? http://api.rubyonrails.org/classes/Object.html#method-i-blank-3F
devolverá verdadero si está vacío o nulo
también ... eso no funcionará si está probando valores booleanos ... ya que
en ese caso podrías usar
fuente
present?
que devuelve lo contrario deblank?
. Entonces podrías convertir esounless
en unif
si quisieras.unless
está bien. Pero sí, me gusta másif
conpresent?
Puede escribirlo más sucintamente de la siguiente manera:
fuente
Simple como pastel:
fuente
fuente
Una forma muy simple de proporcionar valores predeterminados a sus parámetros:
params[:foo] ||= 'default value'
fuente
params.fetch(:foo, 'default value')
demasiadoAcabo de leer esto en las clases de RubyInRails http://api.rubyonrails.org/classes/Object.html#method-i-blank-3F
puedes usar un
blank?
método equivalente aparams[:one].nil? || params[:one].empty?
(p.ej)
fuente
params[:one].nil? || params[:one].empty?
También puedes hacer lo siguiente:
Tiendo a usar la solución anterior cuando quiero verificar más de uno o dos parámetros.
.values_at devuelve y matriz con nil en lugar de cualquier clave de parámetro indefinida. es decir:
devolverá lo siguiente:
.incluye? (nil) luego verifica la matriz para cualquier valor nulo. Volverá verdadero si la matriz incluye nil.
En algunos casos, es posible que también desee comprobar que los parámetros no contienen una cadena vacía en un valor falso.
Puede manejar esos valores agregando el siguiente código encima de la declaración a menos que.
todos juntos se vería así:
Es importante tener en cuenta que delete_if modificará sus hash / params, así que úselo con precaución.
La solución anterior claramente requiere un poco más de trabajo para configurar, pero vale la pena si está comprobando más de uno o dos parámetros.
fuente
Además de las respuestas anteriores:
has_key?
yhas_value?
tienen alternativas más cortas en forma dekey?
yvalue?
. El equipo de Ruby también sugiere usar alternativas más cortas, pero para facilitar la lectura, algunos podrían preferir versiones más largas de estos métodos.Por lo tanto, en su caso sería algo así como
¡NÓTESE BIEN!
.key?
solo verificará si la clave existe e ignora el valor posible. Por ej .:fuente
Esto es lo que hago
y luego los siguientes métodos:
fuente
Solo reconstruí esto para el mismo problema:
la primera línea verifica si nuestras claves de destino están presentes en las claves de los parámetros usando el subconjunto <=? operador. Enumerable.todos? sin bloqueo por defecto devuelve falso si algún valor es nulo o falso.
fuente
También puede verificar si los parámetros están vacíos usando params [: two] .empty
fuente
Intento una respuesta tardía, pero a la vista:
Si desea saber si los valores en un hash (cualquiera) están establecidos, todo lo anterior responde a un verdadero, dependiendo de su punto de vista.
Si desea probar sus parámetros (GET / POST ..), debe usar algo más especial de lo que espera que sea el valor
params[:one]
, algo comoignorando el parámetro (GET / POST) como si no estuvieran configurados, si no encajan como se esperaba
solo una
if params[:one]
detección con o sin detección nula / verdadera es un paso para abrir su página para hackear, porque, por lo general, es el siguiente paso para usar algo comoselect ... where params[:one] ...
, si es intencionado o no, activo o dentro o después de un marco.una respuesta o solo una pista
fuente