代码之家  ›  专栏  ›  技术社区  ›  Chris F.

如何将状态保存为db中的代码,但将其映射到rails中有意义的单词?

  •  1
  • Chris F.  · 技术社区  · 15 年前

    我需要一些帮助…

    如果我将事务状态保存为数据库中的代码,但我想将其转换为有意义的名称,如何做到这一点?这也是推荐的吗?如果没有,还有什么可以替代的呢?

    例如: 在数据库中,状态为“S”、“P”、“A” 在实际应用中,我想相应地显示:“已提交”、“待定”、“已批准”。

    谢谢您!

    2 回复  |  直到 15 年前
        1
  •  1
  •   Selva    15 年前

    比如说,你有一个名为 Account 在其中,将事务状态存储在名为 status 你可以这样做,它的值将是你提到的代码中的一个。

    class Account < ActiveRecord::Base
      TRANSACTION_STATUS = {
        "S" => "Submitted",
        "P" => "Pending",
        "A" => "Approved"
      }
    
      def status
        TRANSACTION_STATUS[self[:status]]
      end
    end
    

    这样,您将重写该方法 地位 由ActiveRecord提供 帐户 对象。

    取决于您将如何使用 地位 字段,您可能需要在这些列上创建适当的索引(例如:如果要选择具有挂起交易等的帐户)

        2
  •  0
  •   galileoMonkey    15 年前

    您可以尝试使用 enum column plugin 以获取此功能。

    迁移以创建表:

    add_column :accounts, :status, :enum, :limit => [:submitted, :pending, :approved],
          :default => :submitted
    

    在模型中:

    validates_columns :status
    

    在控制器中

    @account = Account.new # It just works :)