Cle*_*ton 98 ruby-on-rails ruby-on-rails-4
我的模型中有一个与数据库中的列对应的枚举.
的enum样子:
enum sale_info: { plan_1: 1, plan_2: 2, plan_3: 3, plan_4: 4, plan_5: 5 }
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到整数值?
我试过了
Model.sale_info.to_i
Run Code Online (Sandbox Code Playgroud)
但这只返回0.
Sha*_*ell 129
您可以从枚举所在的类中获取枚举的整数值:
Model.sale_infos # Pluralized version of the enum attribute name
Run Code Online (Sandbox Code Playgroud)
返回一个哈希,如:
{ "plan_1" => 1, "plan_2" => 2 ... }
Run Code Online (Sandbox Code Playgroud)
然后,您可以使用Model类实例中的sale_info值来访问该实例的整数值:
my_model = Model.find(123)
Model.sale_infos[my_model.sale_info] # Returns the integer value
Run Code Online (Sandbox Code Playgroud)
Sub*_*ree 129
你可以像这样得到整数:
my_model = Model.find(123)
my_model[:sale_info] # Returns the integer value
Run Code Online (Sandbox Code Playgroud)
rails 5的更新
对于rails 5,上面的方法现在返回字符串值:(
我现在能看到的最好的方法是:
my_model.sale_info_before_type_cast
Run Code Online (Sandbox Code Playgroud)
Shadwell的答案也继续适用于rails 5.
Ara*_*shM 33
另一种方法是使用read_attribute():
model = Model.find(123)
model.read_attribute('sale_info')
Run Code Online (Sandbox Code Playgroud)
您可以使用 read_attribute_before_type_cast
model.read_attribute_before_type_cast(:sale_info)
=> 1
Run Code Online (Sandbox Code Playgroud)
我在模型中编写了一个方法,以在 Rails 5.1 应用程序中实现相同的效果。
根据您的情况,将其添加到您的模型中并在需要时在对象上调用它
def numeric_sale_info
self.class.sale_infos[sale_info]
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
47044 次 |
| 最近记录: |