Domanda

ho nessuno ha notato qualcosa di simile? Perché accade?

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 

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

roba Extra:

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'
    ...
È stato utile?

Soluzione

Questo dipende dal fatto che in Ruby spazi bianchi può essere significativo. Si vede risultati diversi perché Rubino interpreta il vostro esempio in modi diversi. Quindi

La prima:

"ayay".length + 1

è come

"ayay".length.+(1)

E la seconda:

"ayay".length +1

è come

 "ayay".length(+1)

In questo modo è possibile vedere perché rubino dà un errore nel secondo caso.

Per quanto riguarda il conteggio problema: Rubino interpreta il codice come:

User.count(+1)

E, come si può vedere dal codice SQL generato, v'è una differenza perché +1 è considerato il parametro nome_colonna.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top