#mysql #ruby-on-rails-3 #gem #enumeration
#mysql #ruby-on-rails-3 #драгоценный камень #перечисление
Вопрос:
В настоящее время я ищу подходящий Rails gem для перечислений.
Я уже пробовал
- enum_simulator
- has_enum
- Оба используют столбец string в базе данных для хранения данных enum. Разве целочисленный столбец не будет иметь лучшую производительность или меньшее потребление памяти (при использовании MySQL)?
- Есть ли gem, который уже может это сделать?
Большое спасибо!
Обновление: я нашел драгоценный камень simple_enum, который использует целочисленные значения для представления перечисления в базе данных. Он поддерживает rails 3.1 и находится в хорошем состоянии.
Ответ №1:
Ruby Toolbox — ваш друг. https://www.ruby-toolbox.com/categories/Active_Record_Enumerations
Я использовал enumerated_attribute как с Rails 2.3, так и с Rails 3 с хорошими результатами. Да, он использует столбец string.
Строковые столбцы IMO лучше, чем целочисленные столбцы, потому что они не подразумевают никакого порядка значений и облегчают понимание атрибута (обратный инжиниринг, если хотите), не глядя на исходный код. И обычно разница в производительности незначительна, особенно если у вас есть индекс в поле — и вы должны.
Использование поля MySQL enum
оказалось сложным в Rails 2.3, проблемы со схемами, не уверен, сохраняется ли оно в Rails 3.
Комментарии:
1. Большое спасибо! я посмотрю на это. Знаете ли вы, сжимает ли MYSQL данные строкового столбца, если в перечислении много избыточных значений?
2. @alex, я так не думаю, потому что
enum
это то, для чего нужно. Кстати, не забудьте проголосовать.3. хорошо, спасибо… я проведу некоторые дальнейшие исследования. извините, но в настоящее время у меня недостаточно репутации, чтобы голосовать за, но я обязательно сделаю это как можно скорее.
4. Я могу подтвердить, что MySQL
enum
по-прежнему не поддерживается в Rails 3
Ответ №2:
Ищите этот драгоценный камень: enumerate_it . Я думаю, это решает вашу проблему!