0

ブール値フィールドを持つPostモデルがあります。posted

に何も割り当てずに、新しい投稿を作成しましたposted

irb(main):012:0> Post.first.posted
  Post Load (9.0ms)  SELECT "posts".* FROM "posts" LIMIT 1
=> nil

postedここで、が と等しくないすべての投稿を選択したいと思いますtrue

私はこれを試しましたが、うまくいきません:

irb(main):016:0> Post.where("posted != ?", true)
  Post Load (2.5ms)  SELECT "posts".* FROM "posts" WHERE (posted != 't')
=> []

何か案は?

4

3 に答える 3

2

これは、データベースが NULL を処理する方法が原因です。:default => false移行で設定してみてください。

データベースによっては、次のように表示される場合があります: (MySQL の例)

SELECT 1 = NULL; # returns NULL
SELECT 1 != NULL; # returns NULL
于 2012-10-24T17:12:31.357 に答える
0

sqlite を使用することをお勧めします。そのため、ドキュメントでは次のように説明されています。したがって、WHERE x IS NOT NULL 式のみを使用して、データベースから NULL 値を持つレコードを取得できます。

NULL 値の可能性があるブール型フィールドは使用しないでください。1 つの方法は、移行時にフィールドを非 null として宣言することです。

t.boolean :f, default: true, null: false
于 2012-10-24T17:46:26.107 に答える
0

Post 用に作成したテーブルにはposted、false ではなく true のデフォルト値があると思われます。

テーブル全体を選択して、その値を確認することもできますPost。これをコンソールに入れます:

pp Post.all
于 2012-10-24T17:11:47.307 に答える