带有枚举映射列的`.where` ARel查询仅返回带有“0”的条目

时间:2016-02-19 08:02:06

标签: ruby-on-rails activerecord arel

我有一个模型,其中包含一个字段的枚举。

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时。

为什么会这样?

2 个答案:

答案 0 :(得分:3)

因为Arel尝试将提供的字符串转换为整数并在查询中使用该整数。这是预期的行为。

要解决您的问题,您可以使用Array#index方法:

Foo.where(status: Foo.statuses.index('no'))

但只有直接使用Arel才需要这种方法。 ActiveRecord已经为你关心了。

答案 1 :(得分:3)

ActiveRecord不提供查询枚举的界面。 您可以查询

onPause()

或者

Foo.where(status: 0)