Почему enum не работает, как указано в документации? - PullRequest
0 голосов
/ 27 сентября 2018

У меня есть модель с этим перечислением:

  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 

Обратите внимание, что в обоих случаях ZERO является аргументом запроса.

Также я видел это https://medium.com/@elcortez/the-many-issues-with-rails-enum-36cfb2bec620 и это https://github.com/rails/rails/issues/32618

Должен ли я использовать enum в моем проекте или оно того не стоит?Я использую Rails 4.2, если это имеет значение.

И еда определяется в базе данных следующим образом:

#  food              :integer          default(0)

1 Ответ

0 голосов
/ 27 сентября 2018

То, что вы пытаетесь сделать - использование ключа enum в каталоге where - не работает до Rails 5. Сравните enum 4.2 docs с 5.0 docs , и вы можетеобратите внимание, что для 5.0 состояние документов:

Конечно, вы также можете запросить их напрямую, если области не соответствуют вашим потребностям

Это то, что вы пытаетесьделаю, но учтите, что в 4.2 документах не упоминается об этом подходе.


В любом случае, вы можете добиться подобного с помощью этого немного более длинного сложного подхода:

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

Незабудьте, что выбор enum также станет областью действия, так что это сработает:

Analyte.is_food.count
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...