我有一个模型,其中包含一个字段的枚举。
class Foo < ActiveRecord::Base
enum status: [:yes, :no, :maybe, :so]
end
状态是整数类型字段。对于任何Foo
条记录,我可以使用foo.yes!, foo.no!
等,相应的记录会按预期为foo.yes?, foo.no?
返回true。
但是,当我尝试查询所有status='no'
,status='maybe'
或status='so'
记录时(使用方法Foo.where(status: 'no')
,Foo.where(status: 'maybe')
等),它总是返回status='yes'
的条目。我检查了原始SQL查询,似乎始终只查询status=0
或状态为yes
时。
为什么会这样?
答案 0 :(得分:3)
因为Arel尝试将提供的字符串转换为整数并在查询中使用该整数。这是预期的行为。
要解决您的问题,您可以使用Array#index
方法:
Foo.where(status: Foo.statuses.index('no'))
但只有直接使用Arel才需要这种方法。 ActiveRecord已经为你关心了。
答案 1 :(得分:3)
ActiveRecord不提供查询枚举的界面。 您可以查询
onPause()
或者
Foo.where(status: 0)