0

我遇到了一个问题,需要我访问一堆需要经常更改的变量,所以我制作了一个Misc模型,并且只有一个实例。这是我拥有可编辑全局变量的解决方案。

它包含所有类型的东西,它们似乎不应该拥有自己的模型。这是可以接受的还是违反了一些我不知道的 Rails 构建原则?它有效,但我有疑问。

有没有比这种策略更好的选择(想想获取/编辑(例如) Misc.first.todays_specials)。

如果这是可以通过的,那么有没有办法防止在数据库中创建多个模型项?如您所见,上述方法的问题是,如果突然有两个 Misc 条目,事情会变得不稳定,因为它会.first假设永远只有一个。

4

3 回答 3

1

您可以为设置存储键值配置创建一个表。它将是可扩展的,并且不依赖于预定义的键。此外,您不会有这样的单行表。

如果你需要大量的读/写,你可能还想缓存rails SQL Caching

于 2013-07-03T07:11:45.770 回答
1

你可以使用单例模式。

单例类是只能有一个实例的类。

所以你可以做这样的事情:

initializers/config.rb

require 'singleton'

class MyConfig
  include Singleton

  attr_accessor :config1


  def initialize
    self.config1 = ["hello", "world"]
  end
end

并以这种方式使用它:

MyConfig.instance.config1

您还可以考虑全局变量。全局变量是以符号开头的变量$,并且可以在整个应用程序中由您的 ws 的所有实例访问。

于 2013-07-03T07:51:14.197 回答
0

使用单例来保存全局状态是一个非常糟糕的主意,尤其是在 Web 服务器中:

  1. 如果您使用的是多线程环境 - 您将遇到线程安全问题。
  2. 更相关的是 - 如果您运行多进程或多服务器(如果您的 Web 应用程序成功的话,您将不得不这样做......) - 状态将不一致,因为一个进程/机器中的更改不会传播到其他进程/机器。
  3. 重新启动应用程序将破坏应用程序的状态,因为它仅保存在内存中。

您可以使用SQL@Tala 建议的解决方案,但如果您想要更轻量级和“自由式”的东西,您可能需要查看一些键值存储,如memcachedredis,您可以在其中保存您的状态中心位置,并在需要时获取它。

于 2014-03-28T10:29:27.267 回答