ruby on rails - strong - ¿Cómo verificar si params[: some][: field] es nil?
ruby unless (5)
Probé el código, eso le gustó a mucha gente: cómo probar si los parámetros existen en los rieles , pero no funcionó ():
if ( params.has_key?([:start_date]) && params.has_key?([:end_date]) )
Creo que eso se debe a parámetros complicados y si escribo esto:
if ( params.has_key?([:report][:start_date]) && params.has_key?([:report][:end_date]) )
me da error
can''t convert Symbol into Integer
esto no funciona también:
if ( params[:report][:start_date] && params[:report][:end_date] )
me da error:
undefined method `[]'' for nil:NilClass
Siempre entra en la declaración else.
Aquí están mis params:
report:
start_date: 01/08/2012
end_date: 10/08/2012
Alguien me puede ayudar ?
Esto funciona para:
if params[:report].has_key?(:start_date)
Y tal vez agregue esto para que también compruebe si no está vacío:
&& !params[:report][:start_date].empty?
He estado buscando una mejor solución también. Encontré este:
¿Hay alguna manera clara de evitar llamar a un método en nil en un hash de parámetros anidado?
params[:some].try(:[], :field)
Obtienes el valor o nil
si no existe.
Así que pensé usarlo de una manera diferente:
params[:some].try(:has_key?, :field)
No está mal. Obtienes nil
frente a false
si no está establecido. También se true
si el parámetro está establecido en nil
.
Parece que necesitas lo siguiente
params[:report].present?
o
params[:report].nil?
o
params[:report].empty?
dependiendo de lo que está tratando de verificar
if params[:report] && params[:report][:start_date] && params[:report][:end_date]