我目前需要在数据库中存储一个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
这样做的宝石存在吗?
答案 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