为什么enum不能像文档中所说的那样工作?

rub*_*ect 1 enums ruby-on-rails

我有一个带有该枚举的模型:

  enum food: { not_food: 0, is_food: 1 }
Run Code Online (Sandbox Code Playgroud)

但是,它似乎没有按预期工作:

2.4.4 :007 > Analyte.where( food: 'is_food').count
   (3.0ms)  SELECT COUNT(*) FROM "ANALYTES" WHERE "ANALYTES"."FOOD" = :a1  [["food", 0]]
 => 12709 
2.4.4 :008 > Analyte.where( food: 'not_food').count
   (3.1ms)  SELECT COUNT(*) FROM "ANALYTES" WHERE "ANALYTES"."FOOD" = :a1  [["food", 0]]
 => 12709 
Run Code Online (Sandbox Code Playgroud)

请注意,在两种情况下,零都是查询的参数。

我也看到了这个https://medium.com/@elcortez/the-many-issues-with-rails-enum-36cfb2bec620 和这个 https://github.com/rails/rails/issues/32618

我应该在项目中使用枚举还是值得?如果重要的话,我会使用Rails 4.2。

食物在数据库中的定义如下:

#  food              :integer          default(0)
Run Code Online (Sandbox Code Playgroud)

DMA*_*361 5

您尝试执行的操作-在where中使用枚举键-在Rails 5之前不起作用。将枚举4.2文档5.0文档进行比较,您会发现对于5.0文档,状态如下:

当然,如果范围不符合您的需求,您也可以直接查询它们

这是您要尝试执行的操作,但请注意,4.2文档未提及此方法。


无论如何,您可以使用稍长一些的方法来实现类似效果:

Analyte.where(food: Analyte.foods['is_food']).count
Run Code Online (Sandbox Code Playgroud)

不要忘记枚举选择也将成为作用域,因此这将起作用:

Analyte.is_food.count
Run Code Online (Sandbox Code Playgroud)