0

私は次のスクイールクエリを持っています:

i = Invoice.where{ paid == true }

それは次と同じです:

i = Invoice.where ['paid = ?', true]

そして実行します:

SELECT "invoices".* FROM "invoices" WHERE "invoices"."paid" = 't'

ただし、このクエリは請求書をまったく返しません。sqlite プログラム ether からクエリを実行しようとしても機能しません。そのクエリが間違っているようです。't' と 'f' の両方を値として持つ請求書が sqlite db にあることは間違いありません。これを正しくする方法は?

4

2 に答える 2

1

SQLite には、別個の Boolean ストレージ クラスはありません。代わりに、ブール値は整数 0 (偽) および 1 (真) として格納されます。これを試して:

i = Invoice.where{ paid == 1 }

参照: http://www.sqlite.org/datatype3.html

アップデート:

ここSOで、あなたのジレンマの素晴らしい説明を見つけました。Rails 3 SQLite3 Boolean falseを参照してください。

幸運を!

于 2012-06-15T12:03:23.620 に答える
-2

正しい構文は次のとおりです。

 i = Invoice.where(paid: true)  # corrected from using braces to parenthesis
于 2012-06-15T12:00:21.077 に答える