【问题标题】:Enumeration in Ruby on railsRuby on rails 中的枚举
【发布时间】:2010-06-04 08:44:03
【问题描述】:

我是一名 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

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

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

【问题讨论】:

    标签: ruby-on-rails ruby enums


    【解决方案1】:

    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
    

    【讨论】:

    • 那么什么是状态呢?细绳?我必须将值保存到数据库中。
    • 是的,它只会成功保存在字符串列中...但我会稍微修改一下示例以显示另一种可能性。
    • 这有助于分配,很抱歉成为一个巨大的 n00b 但无能为力。你也知道如何在视图中使用它吗?像选择什么的?
    • 视图中有很多助手可以做,例如:api.rubyonrails.org/classes/ActionView/Helpers/…
    • 你可以写一个getter方法来返回一个可能的状态数组。
    【解决方案2】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-08-14
      • 2016-07-27
      • 2021-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多