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

Posted

技术标签:

【中文标题】如何将状态保存为 db 中的代码,但将它们映射到 rails 中有意义的单词?【英文标题】:How do I save statuses as codes in db but map them to meaningful words in rails? 【发布时间】:2010-02-21 02:37:21 【问题描述】:

我需要一些帮助,请...

如果我将事务状态保存为数据库中的代码,但我想将它们转换为有意义的名称,我该怎么做?这还推荐吗?如果没有,有什么替代方案?

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

谢谢!

【问题讨论】:

【参考方案1】:

例如,假设您有一个名为 Account 的模型,其中您将事务状态存储在名为 status 的列中,其值将是您提到的代码之一,您可以这样做

class Account < ActiveRecord::Base
  TRANSACTION_STATUS = 
    "S" => "Submitted",
    "P" => "Pending",
    "A" => "Approved"
  

  def status
    TRANSACTION_STATUS[self[:status]]
  end
end

通过这种方式,您将覆盖Account对象上的activerecord提供的方法status

根据您将如何使用status 字段,您可能需要在这些列上创建适当的索引(例如:如果您要选择有待处理交易的账户等)

【讨论】:

【参考方案2】:

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

迁移创建表:

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

在模型中:

validates_columns :status

在控制器中

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

【讨论】:

以上是关于如何将状态保存为 db 中的代码,但将它们映射到 rails 中有意义的单词?的主要内容,如果未能解决你的问题,请参考以下文章

git - 是不是可以从“git push”中排除文件,但将它们保存在本地存储库中?

NHibernate 将 1 个对象映射到 2 个表

在多重映射中,当两个迭代器保存具有映射到不同 Value 的相同键的值时。我们如何才能在地图中找到它们中的哪一个在另一个之前

使用JPA将嵌套枚举保存到db

C 编程位表示

如何并行处理数据但将结果写入 Spark 中的单个文件