Ruby 使用枚举类型作为属性值的Rails

Ruby 使用枚举类型作为属性值的Rails,ruby,enums,model,migration,ruby-on-rails-5,Ruby,Enums,Model,Migration,Ruby On Rails 5,以下是我对模型的定义: class OrderFrequency < ApplicationRecord self.table_name = "order_frequencies" enum frequency_unit: { hour: 1} end 使用单位属性的frequency\u unitenum的正确方法是什么 谢谢请看——这个想法不是要有两个属性名(unit和frequency\u unit);你应该只有一个。(毕竟,这是一回事!) 让我们将您的模型更改为: cl

以下是我对模型的定义:

class OrderFrequency < ApplicationRecord
  self.table_name = "order_frequencies"
  enum frequency_unit: { hour: 1}

end
使用单位属性的
frequency\u unit
enum的正确方法是什么

谢谢

请看——这个想法不是要有两个属性名(
unit
frequency\u unit
);你应该只有一个。(毕竟,这是一回事!)

让我们将您的模型更改为:

class OrderFrequency < ApplicationRecord
  # Note: Specifying the (default) table_name here is also redundant
  enum unit: { hour: 1 }
end
甚至(!!)只要写下:

OrderFrequency.create(
  value: 'value 123',
  unit: 'hour'
)

ActiveRecord::Enum
的关键思想是,在数据库中,值存储为一个整数,但在应用程序中(99%的时间),您可以使用人性化的
String
s,即
“hour”
而不是
1

如果出于某种原因,您需要检索所有已知
单元的列表,您可以通过以下方法执行此操作:

OrderFrequency.units.keys #=> ['hour']
OrderFrequency.create(
  value: 'value 123',
  unit: OrderFrequency.units['hour']
)
OrderFrequency.create(
  value: 'value 123',
  unit: 'hour'
)
OrderFrequency.units.keys #=> ['hour']