1

このクエリはエラーをスローします。

EncodingPreset.where('default = ?', false)

ActiveRecord::StatementInvalid: PG::Error: ERROR:  syntax error at or near "default"
LINE 1: ...coding_presets".* FROM "encoding_presets"  WHERE (default = ...
                                                             ^
: SELECT "encoding_presets".* FROM "encoding_presets"  WHERE (default = 'f')

しかし、これは機能します:

EncodingPreset.where(:default => false)

最初のクエリが機能しないのはなぜですか?

バージョン:

ruby-1.9.3-p194
activerecord-3.2.11
4

2 に答える 2

7

これは、default がキーワードであり、クエリで使用するには引用符で囲む必要があるためです。これはうまくいくはずです:

EncodingPreset.where('"default" = ?', false)
于 2013-01-28T09:36:59.083 に答える
3

defaultはpostgreSQLの予約済みキーワードであるため、エラーがスローされます。列名を別の名前に変更すると、機能します

于 2013-01-28T09:35:44.497 に答える