3

Squeel を使用して SQL クエリを作成するにはどうすればよいですか?

    SELECT * FROM documents where (NOT document.deleted OR document.deleted IS NULL)

私は試した:

    Document.where { (-deleted) | (deleted == nil) }

しかし、このエラーが発生します:

    NoMethodError: undefined method `|' for deleted.-@:Squeel::Nodes::KeyPath
4

2 に答える 2

2

ActiveRecord がブール値を文字列フラグとしてデータベースに格納することに注意することは非常に重要です。したがって、あなたが言及した場合、真のであるdocument.deleted等しいです。そのため、単純に演算子を使用することはできません。'f'NOT

おそらくあなたが探しているのは:

Document.where { deleted.eq(false) | deleted.eq(nil) }

乾杯

于 2013-02-18T12:41:34.250 に答える
2

NOTは返されたセットを逆にするため、比較対象を定義する必要があります。

(-deleted) #there is nothing to reverse

あなたのコメントに基づいて、私はあなたが意味すると思うdeleted not equal trueので、

Document.where { -(deleted == true) | (deleted == nil) }

しかし、真の逆は偽ですよね?したがって、次のように言えます。

Document.where { (deleted == false) | (deleted == nil) }
于 2013-02-18T12:40:03.607 に答える