在我的数据库中,我有一个模型,其中有一个字段应该从一个选项列表中选择.例如,考虑需要存储测量的模型,例如5英尺或13厘米或12.24立方米.实现这一目标的显而易见的方法是使用十进制字段,然后使用其他字段来存储测量单位.
那么存储测量单位的最佳方法是什么?我过去曾使用过几种方法:
1)将各种选项存储在另一个数据库表(和相关模型)中,并将两者与标准外键相关联(通常需要加载相关模型).这似乎有点矫枉过正,因为你强迫数据库在每个查询上执行连接.
2)将选项存储为常量哈希值,加载到其中一个初始值设定项中,其中哈希值中的键存储在测量单位字段中.这样,您可以有效地在Ruby中进行连接(可能会或可能不会提高性能),但是您无法从"度量单位"方面进行查询.这不会是一个问题,只要你不太可能需要进行"以cm为单位找到所有测量值"的查询.
这些都不觉得我特别优雅..任何人都能提出更好的建议吗?
你见过constant_cache吗?它是1和2中最好的组合 - 查找数据存储在数据库中,但它在查找模型上作为类常量公开,仅在应用程序启动时加载,因此您不会经常遇到连接惩罚.以下示例来自README:
移民:
create_table :account_statuses do |t| t.string :name, :description end AccountStatus.create!(:name => 'Active', :description => 'Active user account') AccountStatus.create!(:name => 'Pending', :description => 'Pending user account') AccountStatus.create!(:name => 'Disabled', :description => 'Disabled user account')
模型:
class AccountStatus < ActiveRecord::Base caches_constants end
使用它:
Account.new(:username => 'preagan', :status => AccountStatus::PENDING)