5

想象一个用 Ruby on Rails 编写的 Web 应用程序。该应用程序的部分状态以不符合模型描述的数据表示。此状态描述符需要与模型保存在同一数据库中。它与模型的不同之处在于它的类只需要一个实例,并且它与其他类没有关系。

有没有人遇到过这样的事情?

4

5 回答 5

3

如果它是数据,并且在数据库中,那么它就是模型的一部分。

于 2008-09-22T11:06:54.243 回答
3

根据您的描述,我认为 rails-settings 插件应该可以满足您的需求。

从自述文件:

“Settings 是一个插件,可以轻松管理全局键、值对表。把它想象成存储在数据库中的全局哈希,它使用简单的 ActiveRecord 之类的方法进行操作。跟踪您不想使用的任何全局设置硬编码到您的 Rails 应用程序中。您可以存储任何类型的对象。字符串、数字、数组或任何对象。

http://github.com/Squeegy/rails-settings/tree/master

于 2008-09-22T13:35:01.733 回答
1

这并不是真正的 RoR 问题。这是一个一般的OO设计问题。

如果是我,我可能会找到一种方法将数据概念化为模型,然后使用工厂方法和私有构造函数使其成为单例。

或者,您可以将其视为一种日志记录形式。在这种情况下,您只需要一个 Logger 类(也是一个单例)直接读取/写入数据库并在每个请求的开始和结束时调用。

于 2008-09-22T11:09:07.030 回答
1

在 Rails 中,如果数据在数据库中,那么它就在模型中。在这种情况下,模型可能被称为“配置”,但它仍然映射到 Rails 系统中的 ActiveRecord 类。

如果这些数据确实是静态的,那么您可能根本不需要数据库。您可以在应用程序控制器中使用(例如)一个变量:

class ApplicationController < ActionController::Base
  helper :all 
  @data = "YOUR DATA HERE"   
end

有许多方法可用于实例化用于 Rails 应用程序的数据。

于 2008-09-22T11:22:57.497 回答
0

我不确定我是否理解您为什么说它不适合 Rails 模型。

如果它只是一个复杂的数据结构,只需将一堆 Ruby 代码保存在数据库的文本字段中即可:-)

例如,如果您要保存一个复杂的嵌套哈希,请将以下内容分配给您的“数据”文本字段:

ComplexThing.data = complex_hash.inspect

当你想读回来时,只需

complex_hash = eval ComplexThing.data

让我指出有关此解决方案的另外两件事:

  • 如果您的数据结构不是标准的 Ruby 类,简单的检查可能无法做到。如果您在任何地方看到 #<MyClass:0x4066e3c>,则说明某些内容没有正确序列化。
  • 这是一个幼稚的实现。如果您冒着拥有 unicode 数据的风险,或者您确实要保存大量定制类,您可能需要查看真正的编组解决方案。
于 2008-09-22T13:24:24.490 回答