如何比较控制器中的枚举模型属性?

时间:2014-05-20 04:13:31

标签: ruby-on-rails enums ruby-on-rails-4.1

我有以下模型对象:

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

2 个答案:

答案 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是字符串值。