想象一个用 Ruby on Rails 编写的 Web 应用程序。该应用程序的部分状态以不符合模型描述的数据表示。此状态描述符需要与模型保存在同一数据库中。它与模型的不同之处在于它的类只需要一个实例,并且它与其他类没有关系。
有没有人遇到过这样的事情?
想象一个用 Ruby on Rails 编写的 Web 应用程序。该应用程序的部分状态以不符合模型描述的数据表示。此状态描述符需要与模型保存在同一数据库中。它与模型的不同之处在于它的类只需要一个实例,并且它与其他类没有关系。
有没有人遇到过这样的事情?
如果它是数据,并且在数据库中,那么它就是模型的一部分。
根据您的描述,我认为 rails-settings 插件应该可以满足您的需求。
从自述文件:
“Settings 是一个插件,可以轻松管理全局键、值对表。把它想象成存储在数据库中的全局哈希,它使用简单的 ActiveRecord 之类的方法进行操作。跟踪您不想使用的任何全局设置硬编码到您的 Rails 应用程序中。您可以存储任何类型的对象。字符串、数字、数组或任何对象。
这并不是真正的 RoR 问题。这是一个一般的OO设计问题。
如果是我,我可能会找到一种方法将数据概念化为模型,然后使用工厂方法和私有构造函数使其成为单例。
或者,您可以将其视为一种日志记录形式。在这种情况下,您只需要一个 Logger 类(也是一个单例)直接读取/写入数据库并在每个请求的开始和结束时调用。
在 Rails 中,如果数据在数据库中,那么它就在模型中。在这种情况下,模型可能被称为“配置”,但它仍然映射到 Rails 系统中的 ActiveRecord 类。
如果这些数据确实是静态的,那么您可能根本不需要数据库。您可以在应用程序控制器中使用(例如)一个变量:
class ApplicationController < ActionController::Base
helper :all
@data = "YOUR DATA HERE"
end
有许多方法可用于实例化用于 Rails 应用程序的数据。
我不确定我是否理解您为什么说它不适合 Rails 模型。
如果它只是一个复杂的数据结构,只需将一堆 Ruby 代码保存在数据库的文本字段中即可:-)
例如,如果您要保存一个复杂的嵌套哈希,请将以下内容分配给您的“数据”文本字段:
ComplexThing.data = complex_hash.inspect
当你想读回来时,只需
complex_hash = eval ComplexThing.data
让我指出有关此解决方案的另外两件事: