ActiveRecord :: StatementInvalid SQLite3 :: SQLException: keine solche Spalte: true:

7

Ich möchte, dass @ messages @ folder.messages zurückgibt, wobei der Wert der Spalte "deleted" NICHT gleich true ist. Ich bin mir nicht sicher, warum dies eine SQLException wirft. Ich denke, dass ich das gelöschte Attribut nicht richtig formatiere, aber ich bin nicht sicher, wie ich es beheben soll.

Jede Hilfe wird sehr geschätzt. Danke im Voraus.

Fehlermeldung:

%Vor%

Anwendungsablauf:

%Vor%

Mailbox_Controller.rb

%Vor%     
user714001 24.04.2011, 02:54
quelle

3 Antworten

18

SQLite verwendet C boolesche Werte :

  

SQLite hat keine separate boolesche Speicherklasse. Stattdessen werden boolesche Werte als Ganzzahlen 0 (falsch) und 1 (wahr) gespeichert.

Also, wenn du das sagst:

%Vor%

SQLite weiß nicht, was true ist, daher wird angenommen, dass Sie versuchen, auf einen anderen Spaltennamen zu verweisen.

Der richtige Weg, um damit fertig zu werden, besteht darin, dass AR Ihren Ruby-Boolean in einen SQLite-Booleschen Wert konvertiert (wie in den Antworten von Tam und fl00r). Ich denke, es ist nützlich zu wissen, was du falsch machst.

AKTUALISIEREN : Wenn Sie nach nicht wahrem deleted suchen und NULL einschließen möchten, sollten Sie Folgendes tun:

%Vor%

Oder besser, erlauben Sie NULLs in deleted überhaupt nicht. Sie sollten nicht zulassen, dass NULL eine Spalte ist, es sei denn, Sie müssen dies unbedingt tun (der Standardwert von ActiveRecord für die NULL-Zulässigkeit ist genau das Gegenteil dessen, was er sein sollte). Der SQL NULL ist ein seltsames Biest und Sie müssen es immer speziell behandeln, am besten, es nicht zuzulassen, es sei denn, Sie benötigen einen "nicht da" oder "nicht spezifiziert" -Wert für eine Spalte.

    
mu is too short 24.04.2011, 03:05
quelle
3
%Vor%

true ist für verschiedene Datenbanken unterschiedlich. In einigen ist es t/f value, und in einigen true/false , also sollten Sie es in Anführungszeichen setzen und sicher sein, ob es für Ihre bestimmte Datenbank richtig ist, oder Sie sollten es aus Ihrem SQL ausschließen, damit Rails das tut Job für dich.

UPD

Wenn deleted ist NULL . Zuerst. Setzen Sie das gelöschte Feld standardmäßig auf false . Zweitens, wie man es mit AR findet:

%Vor%     
fl00r 24.04.2011 02:58
quelle
0

probiere

aus %Vor%     
Tam 24.04.2011 02:58
quelle