Rails静态数据集

时间:2012-11-14 16:11:56

标签: ruby-on-rails ruby design-patterns activerecord

处理静态数据集的最佳方法是什么(非动态)?

例如,假设您的模型具有一组10个不同的实例,每个实例都是唯一的,但在应用程序的整个生命周期中都不会发生任何变化。创建一个activerecord模型并将这些数据存储在数据库中似乎有点过头了,但创建泛型类并将这些数据存储在代码中似乎很难看。

什么是最佳实践?


示例:

您有费率用户。用户可以具有1-10的级别,当级别更改时,速率会发生变化。速率可能有其他信息,因此只需将其作为属性存储在用户上可能比它的价值更麻烦。将它绑定到一个Rate或者将它作为一个方法创建用户是否有意义如下:

def rate
  case self.level
  when 1:
    { value: "foo", something: "bar", else: "baz" }
  when 2:
    # etc
  end
end

似乎这两种解决方案都不理想,但我不确定是否还有其他理想可能发生。

2 个答案:

答案 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)。