Domanda

Tutto sembra funzionare bene negli ambienti di sviluppo e produzione:

> script/console
Loading development environment (Rails 2.3.8)
ruby-1.8.7-p302 > Tape.find(:first, :conditions => "deleted_at is not null").deleted_at.nil?
 => false 
ruby-1.8.7-p302 > Tape.find(:first, :conditions => "deleted_at is null").deleted_at.nil?
 => true

Allora perché sto ottenendo i risultati esatti opposti nell'ambiente di test?

> script/console test
Loading test environment (Rails 2.3.8)
ruby-1.8.7-p302 > Tape.find(:first, :conditions => "deleted_at is not null").deleted_at.nil?
 => true

Cercare deleted_at is null non restituisce mai alcun record nell'ambiente di test, anche quando alcune chiamate lo hanno deleted_at = nil E alcuni hanno un timestamp lì.

Ecco una lettura parziale della tabella MySQL:

mysql> describe tapes;
+-----------------+--------------+------+-----+---------+----------------+
| Field           | Type         | Null | Key | Default | Extra          |
+-----------------+--------------+------+-----+---------+----------------+
| id              | int(11)      | NO   | PRI | NULL    | auto_increment |
...
| deleted_at      | datetime     | YES  |     | NULL    |                |
+-----------------+--------------+------+-----+---------+----------------+

Qualcuno sa cosa sta succedendo? è un insetto?

È stato utile?

Soluzione 2

Quindi si scopre che il metodo che stavo usando per creare valori null nel mio dispositivo non era corretto. Sembra che se si desidera un vero valore nullo da un dispositivo CSV è avere quel campo predefinito su NULL e semplicemente non includere quella colonna nel tuo CSV. Spero che questo aiuti qualcun altro :)

Altri suggerimenti

I tuoi database di test e di produzione sono sia MySQL o il database di test SQLite? Alcuni database (come SQLite) possono trattare un valore nullo uguale a una stringa vuota, quindi si desidera utilizzare blank? invece di nil?.

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