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

时间:2018-09-27 10:45:02

标签: ruby-on-rails enums

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

  enum food: { not_food: 0, is_food: 1 }

但是它似乎无法按预期工作:

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 

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

我也看到了这个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)

1 个答案:

答案 0 :(得分:4)

您要尝试执行的操作-在where中使用枚举键-在Rails 5之前不起作用。将枚举4.2 docs5.0 docs进行比较,您可以看到对于文档5.0状态:

  

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

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


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

Analyte.where(food: Analyte.foods['is_food']).count

别忘了枚举选择也将成为作用域,因此这将起作用:

Analyte.is_food.count