我有以下模型对象:
class ModelObj < ActiveRecord::Base
enum type: [:value_a, :value_b]
end
在我的控制器中,我想检查枚举type
属性的值,但不确定如何。 控制器中可枚举值的比较语法是什么?
这里有来自无法运作的控制器的一些代码:
class SomeController < ApplicationController
def index
m = ModelObj.find(...)
if m.type == :value_a
# do this ...
end
end
end
答案 0 :(得分:11)
根据ActiveRecord::Enum documentation,您可以通过各种方式访问枚举值。一些例子:
m.type # => 'value_a'
m.value_a? # => true
m.value_b? # => false
您提供了控制器代码,您说“无法正常工作”,是否需要使用字符串比较而不是符号?
答案 1 :(得分:3)
以下是我为使其发挥作用所做的工作:
class SomeController < ApplicationController
def index
m = ModelObj.find(...)
if (ModelObj.types[m.type] == ModelObj.types[:value_a])
# do this ...
end
end
end
您可以将其视为http://edgeapi.rubyonrails.org/classes/ActiveRecord/Enum.html上的最新示例:
Conversation.where("status <> ?", Conversation.statuses[:archived])
但问题是它是一个序数值,而m.type是字符串值。