处理静态数据集的最佳方法是什么(非动态)?
例如,假设您的模型具有一组10个不同的实例,每个实例都是唯一的,但在应用程序的整个生命周期中都不会发生任何变化。创建一个activerecord模型并将这些数据存储在数据库中似乎有点过头了,但创建泛型类并将这些数据存储在代码中似乎很难看。
什么是最佳实践?
示例:
您有费率和用户。用户可以具有1-10的级别,当级别更改时,速率会发生变化。速率可能有其他信息,因此只需将其作为属性存储在用户上可能比它的价值更麻烦。将它绑定到一个Rate或者将它作为一个方法创建用户是否有意义如下:
def rate
case self.level
when 1:
{ value: "foo", something: "bar", else: "baz" }
when 2:
# etc
end
end
似乎这两种解决方案都不理想,但我不确定是否还有其他理想可能发生。
答案 0 :(得分:1)
我会将此信息存储在YAML文件中。您可以使用RailsConfig gem并创建一个YAML文件,如
level:
1:
some: value
another: value
2:
some: second value
another: second value
然后使用
访问它rate = 2
val = Settings.level[rate.to_s].some
(我不完全确定数字是YAML中的键,也许你必须逃脱它们)
答案 1 :(得分:0)
在这种情况下我使用常量:声明后常量不会改变,但声明可以是动态的:
OS =
case RUBY_PLATFORM
when /linux/ then :linux
when /osx/ then :osx
when /windows/ then :windows
else :unknown
当使用常量作为静态值时,性能应该更好,因为它们应该被记忆(并且因为静态应该是它们的目的,所以可能Ruby实现可以信任它;我读了一些关于JRuby和常量实现的东西,我会发布它如果我找到了。编辑我找到了它:http://blog.headius.com/2012/09/avoiding-hash-lookups-in-ruby.html)。