2010-06-04 96 views
2

我是C#程序员,我正在寻找Ruby on Rails。但是我可能在心智设定上有些麻烦。Ruby on Rails枚举

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

我会normaly使投票对象有一个领域的一些这样的事

private VoteEnum voteEnum = VoteEnum.Neutral 

如何在地球上我可以在红宝石acomplish这一点。

我已经找到像一些例子:

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

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

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

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

我希望你能理解我的问题,并希望你能帮我让我的脑海里缠绕这个。

回答

3

Ruby不像C#那样严格类型化。但是你可以使用验证来检查什么的状态:

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 
+0

那么,什么类型的地位呢?串?我必须将值保存到数据库中。 – LordSauron 2010-06-04 08:56:15

+0

是的,它只会被成功保存在一个字符串列中......但我会稍微修改一下这个例子以显示另一种可能性。 – Koterpillar 2010-06-04 09:00:32

+0

这有助于分配,作为一个巨大的n00b抱歉,但无法帮助它。 你也知道如何在视图中使用它吗?像选择什么的? – LordSauron 2010-06-04 09:04:31

0

通常情况下,如果只是在C++或C#中使用一个枚举,我会把它转换如下:

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

所以你在你的数据库中存储一个整数,并且你的代码中的含义是清楚的。

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