如何将状态保存为 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”中排除文件,但将它们保存在本地存储库中?
在多重映射中,当两个迭代器保存具有映射到不同 Value 的相同键的值时。我们如何才能在地图中找到它们中的哪一个在另一个之前