Ho giocato alla console di rails cercando di far funzionare le cose, e continuo a notare che una delle mie query continua a tornare nil quando non dovrebbe t. Osservando la query SQL generata, noto che ha aggiunto AND (1=0)
ogni volta. Questo è un po 'fastidioso, e non sono sicuro del perché lo stia facendo.ActiveRecord aggiunge 'AND (1 = 0)' alla fine delle query
Nota: Utilizzo della gemma attiva.
Procedura per riprodurre:
(Dopo il collegamento a tavoli in console rotaie)
2.1.2 :xxxx > @parent = Parent.take
Parent Load (38.1ms) SELECT `parents`.* FROM `parents` LIMIT 1
=> #<Parent id: 37, ...>
2.1.2 :xxxx > @child = Child.where(id: @parent.actable_id)
SQL (0.7ms) SELECT `childs`.`id` AS t0_r0, `childs`.`attribute` AS t0_r1, FROM `childs`
...
LEFT OUTER JOIN `parents` ON `parents`.`actable_id` = `childs`.`id` AND `parents`.`actable_type` = 'child type' WHERE `childs`.`id` = 20 AND (1=0)
=> #<ActiveRecord::Relation []>
perché sta succedendo questo? Come faccio a smettere?
Ho notato che Rails esegue questa operazione per questa query: 'User.where (: id => []) ', dato che non puoi scrivere' SELECT * FROM users WHERE id in() 'in SQL. Quindi immagino che questo è l'approccio necessario per le query che sa non restituirà nulla, ma non può esprimere in SQL. – MaxGabriel
@MaxGabriel questa è stata la risposta per me. Forse metterlo come risposta invece di un semplice commento? – jgraft
@jgraft Buona idea, ho fatto questa risposta come mi hai suggerito. – MaxGabriel