9

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

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

什么是公认的最佳实践?


例子:

你有一个Rate和一个User。一个用户可以有一个从 1 到 10 的级别,当级别发生变化时,速率会发生变化。汇率可能有其他信息,因此简单地将其作为属性存储在用户上可能比它的价值更麻烦。将其与 Rate 绑定或将其创建为 User 上的方法是否有意义,如下所示:

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

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

4

2 回答 2

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 中的键,也许你必须转义它们)

于 2012-11-14T17:17:10.427 回答
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 )。

于 2012-11-14T16:24:06.787 回答