这个宝石存在吗?

时间:2015-01-23 06:26:22

标签: ruby-on-rails ruby gem

我目前需要在数据库中存储一个id,表示特定常量数组中的索引。我总是使用这样的方法,由关注点生成。

class Foo
  ARY = [ :a :b, :c ]

  def bar
    return ARY[self.bar_id]
  end

  def bar=(value)
    return self.bar_id=ARY.index(value)
  end

  scope :a, -> { where(:bar_id => ARY.index(:a)) }
  scope :b, -> { where(:bar_id => ARY.index(:b)) }
  scope :c, -> { where(:bar_id => ARY.index(:c)) }

  def a?
    return bar == :a
  end
  def b?
    return bar == :b
  end
  def c?
    return bar == :c
  end

end

这样做的宝石存在吗?

2 个答案:

答案 0 :(得分:2)

使用simple_enum宝石,您的班级成为

class Foo < ActiveRecord::Base
  as_enum :bar, [:a, :b, :c], source: :bar_id
end

答案 1 :(得分:1)

ActiveRecord内置了对此的支持。 http://api.rubyonrails.org/classes/ActiveRecord/Enum.html