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

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)

你提出了你说" 不起作用 "的控制器代码,是否需要使用字符串比较而不是符号?


Chr*_*ris 5

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

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