jef*_*her 4 enums ruby-on-rails ruby-on-rails-4.1
我有以下模型对象:
class ModelObj < ActiveRecord::Base
enum type: [:value_a, :value_b]
end
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我想检查枚举type属性的值,但不知道如何.在控制器中比较可枚举值的语法是什么?
以下是来自控制器的一些代码不起作用:
class SomeController < ApplicationController
def index
m = ModelObj.find(...)
if m.type == :value_a
# do this ...
end
end
end
Run Code Online (Sandbox Code Playgroud)
Buc*_*yle 13
根据ActiveRecord :: Enum文档,您可以通过各种方式访问枚举值.一些例子:
m.type # => 'value_a'
m.value_a? # => true
m.value_b? # => false
Run Code Online (Sandbox Code Playgroud)
你提出了你说" 不起作用 "的控制器代码,是否需要使用字符串比较而不是符号?
这是我为使其正常工作所做的工作:
class SomeController < ApplicationController
def index
m = ModelObj.find(...)
if (ModelObj.types[m.type] == ModelObj.types[:value_a])
# do this ...
end
end
end
Run Code Online (Sandbox Code Playgroud)
您可以在http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html将其视为当前的最后一个示例:
Conversation.where("status <> ?", Conversation.statuses[:archived])
但问题是它是一个序数值,而 m.type 是字符串值。