在rails上的枚举

我是一名C#程序员,我正在寻找ruby on rails。 但是我可能会遇到一些麻烦,或者说有一些想法。

我有一个对象投票,该对象可以是Pro,Neutral或con。

我会正常地使投票对象有一个像这样的字段

private VoteEnum voteEnum = VoteEnum.Neutral 

我怎么能在ruby中实现这一点。

我找到了一些例子:

 def MyClass < ActiveRecord::Base ACTIVE_STATUS = "active" INACTIVE_STATUS = "inactive" PENDING_STATUS = "pending" end 

然后,当使用来自另一个类的模型时,我引用了常量

 @model.status = MyClass::ACTIVE_STATUS @model.save 

这似乎对我来说是正确的,但我的主要问题是我如何告诉模型状态是枚举或constain的类型..

我希望你能理解我的问题,并希望你能帮助我解决这个问题。

Ruby不像C#那样严格打字。 但您可以使用validation来检查状态中的内容:

 def MyClass < ActiveRecord::Base ACTIVE_STATUS = "active" INACTIVE_STATUS = "inactive" PENDING_STATUS = "pending" NUMERICAL_STATUS = 500 # this is weird but okay ALL_STATUSES = [ACTIVE_STATUS, INACTIVE_STATUS, PENDING_STATUS, NUMERICAL_STATUS] validates_inclusion_of :status, :in => ALL_STATUSES end 

通常,如果它只是在C ++或C#中使用的枚举,我会将其翻译如下:

 class VoteStatus ACTIVE_STATUS=0 INACTIVE_STATUS=1 PENDING_STATUS=2 end 

所以你在数据库中存储一个整数,你的代码中的含义是明确的。

但是,我建议使用一个简单的域表。 通过这种方式,您可以定义并维护数据库中的可能状态,您可以定义ID,名称和描述,并且突然您的状态会自我记录,并且名称和描述也可以显示给用户(希望您不需要翻译:)。