Question

Quelqu'un at-il remarqué quelque chose comme ça? Pourquoi est-il passe?

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 

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

Extra stuff:

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'
    ...
Était-ce utile?

La solution

Cela dépend du fait que dans les espaces blancs Ruby peut être significative. Vous voyez des résultats différents parce que Ruby interprète votre exemple de différentes façons. Donc,

Le premier:

"ayay".length + 1

est comme

"ayay".length.+(1)

Et le second:

"ayay".length +1

est comme

 "ayay".length(+1)

De cette façon, vous pouvez voir pourquoi Ruby donne une erreur dans le second cas.

En ce qui concerne le problème: Ruby interprète le code comme:

User.count(+1)

Et, comme vous pouvez le voir sur le SQL généré, il y a une différence parce +1 est considéré comme le paramètre column_name.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top