Pregunta

¿Alguien ha notado algo como esto? ¿Por qué está sucediendo?

ruby-1.9.2-p290 :006 > User.count
   (0.4ms)  SELECT COUNT(*) FROM "users" 
 => 102 
ruby-1.9.2-p290 :007 > User.count + 1
   (0.4ms)  SELECT COUNT(*) FROM "users" 
 => 103 
ruby-1.9.2-p290 :008 > User.count+ 1
   (0.4ms)  SELECT COUNT(*) FROM "users" 
 => 103 
ruby-1.9.2-p290 :009 > User.count+1
   (0.4ms)  SELECT COUNT(*) FROM "users" 
 => 103 
ruby-1.9.2-p290 :010 > User.count +1
   (0.5ms)  SELECT COUNT(1) FROM "users" 
 => 102 

Usando ruby 1.9.2p290 (2011-07-09 revision 32553) [x86_64-linux] && Rails 3.1.3

Cosas adicionales:

ruby-1.9.2-p290 :007 > "ayay".length + 1
 => 5 
ruby-1.9.2-p290 :008 > "ayay".length +1
ArgumentError: wrong number of arguments(1 for 0)
    from (irb):8:in `length'
    ...
¿Fue útil?

Solución

Esto depende del hecho de que en los espacios blancos rubí puede ser importante. Ves diferentes resultados porque Ruby interpreta tu ejemplo de diferentes maneras. Asi que

El primero:

"ayay".length + 1

es como

"ayay".length.+(1)

Y el segundo:

"ayay".length +1

es como

 "ayay".length(+1)

De esta manera puedes ver Por qué Ruby da un error en el segundo caso.

Con respecto a contar Problema: Ruby interpreta el código como:

User.count(+1)

Y, como puede ver en el SQL generado, hay una diferencia porque +1 se considera el parámetro column_name.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top