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)
您尝试执行的操作-在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)
归档时间: |
|
查看次数: |
64 次 |
最近记录: |