ruby on rails - rails - ¿Hay un Ruby, o Ruby-ismo para not_nil? opuesto de nil? ¿método?
ruby unless (5)
Cuidado con otras respuestas que presentan el present?
como una respuesta a tu pregunta.
present?
es lo opuesto a blank?
en rieles.
present?
verifica si hay un valor significativo. Estas cosas pueden fallar un present?
comprobar:
"".present? # false
" ".present? # false
[].present? # false
false.present? # false
YourActiveRecordModel.where("false = true").present? # false
Considerando que a !nil?
cheque da:
!"".nil? # true
!" ".nil? # true
![].nil? # true
!false.nil? # true
!YourActiveRecordModel.where("false = true").nil? # true
nil?
comprueba si un objeto es realmente nil
. Cualquier otra cosa: una cadena vacía, 0
, false
, lo que sea, no es nada.
present?
es muy útil, pero definitivamente no es lo opuesto a nil?
. Confundir los dos puede conducir a errores inesperados.
Para su caso de uso present?
funcionará, pero siempre es inteligente estar al tanto de la diferencia.
No tengo experiencia en Ruby, por lo que mi código se siente "feo" y no idiomático:
def logged_in?
!user.nil?
end
Prefiero tener algo así como
def logged_in?
user.not_nil?
end
¿Pero no puede encontrar tal método que se nil?
nada nil?
Pareces demasiado preocupado con los booleanos.
def logged_in?
user
end
Si el usuario es nulo, ¿has iniciado sesión? devolverá un valor de "falsey". De lo contrario, devolverá un objeto. En Ruby no necesitamos devolver verdadero o falso, ya que tenemos valores "verídicos" y "defectuosos" como en JavaScript.
Actualizar
Si está utilizando Rails, puede hacer que esto se lea mejor utilizando el present?
método:
def logged_in?
user.present?
end
Puedes usar lo siguiente:
if object
p "object exists"
else
p "object does not exist"
end
Esto no solo funciona para nada, sino también para falso, por lo que debe probar para ver si funciona en su uso.
Tal vez este podría ser un enfoque:
class Object
def not_nil?
!nil?
end
end
cuando usas ActiveSupport, ¿hay user.present?
http://api.rubyonrails.org/classes/Object.html#method-i-present%3F , para comprobar solo si no es nulo, ¿por qué no utilizarlo?
def logged_in?
user # or !!user if you really want boolean''s
end