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']