如何在Ruby on Rails中处理必须保存在数据库中但不是合适模型的数据?

问题描述:

想象一下用Ruby on Rails编写的Web应用程序。该应用程序状态的一部分表示为一段不符合模型描述的数据。这个状态描述符需要和模型一样保存在同一个数据库中。 它与模型的不同之处在于只需要其类的一个实例,并且它与其他类没有关系。如何在Ruby on Rails中处理必须保存在数据库中但不是合适模型的数据?

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

从你的描述,我认为轨道的设置插件应该做您的需要。

自述:

“的设置是一个插件,它管理全球关键的表,值对容易认为它像保存在你的数据库的全局散列,使用简单的ActiveRecord像操作方法。跟踪任何你不想硬编码到你的Rails应用程序的全局设置,你可以存储任何类型的对象,字符串,数字,数组或任何对象。

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

如果它的数据,它是在数据库中,它是模型的一部分。

这不是一个真正的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 

让我指出这个解决方案2个更多的东西:

  • 如果你的数据结构不是标准的Ruby类,一个简单的检查可能不会这样做。如果你看到#< MyClass:0x4066e3c >任何地方,东西没有正确序列化。
  • 这是一个天真的实现。如果您有unicode数据的风险,或者您确实在节省大量定制课程,您可能需要查看真正的编组解决方案。