Rails ActiveCord non sembra gestire correttamente i valori nulli nell'ambiente di prova
-
12-11-2019 - |
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?
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?
.