8

我有以下模型对象:

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
4

2 回答 2

16

根据ActiveRecord::Enum 文档,您可以通过各种方式访问​​枚举值。一些例子:

m.type     # => 'value_a'
m.value_a? # => true
m.value_b? # => false

您提供了您说“<em>不起作用”的控制器代码,是否需要使用字符串比较而不是符号?

于 2014-05-20T04:49:40.297 回答
5

这是我为使其正常工作所做的工作:

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

于 2014-08-01T02:32:23.430 回答