如何在Ruby on Rails中处理必须保存在数据库中但不是合适模型的数据?
想象一下用Ruby on Rails编写的Web应用程序。该应用程序状态的一部分表示为一段不符合模型描述的数据。这个状态描述符需要和模型一样保存在同一个数据库中。 它与模型的不同之处在于只需要其类的一个实例,并且它与其他类没有关系。如何在Ruby on Rails中处理必须保存在数据库中但不是合适模型的数据?
有没有人遇到过这样的事情?
从你的描述,我认为轨道的设置插件应该做您的需要。
自述:
“的设置是一个插件,它管理全球关键的表,值对容易认为它像保存在你的数据库的全局散列,使用简单的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
让我指出这个解决方案2个更多的东西:
- 如果你的数据结构不是标准的Ruby类,一个简单的检查可能不会这样做。如果你看到#< MyClass:0x4066e3c >任何地方,东西没有正确序列化。
- 这是一个天真的实现。如果您有unicode数据的风险,或者您确实在节省大量定制课程,您可能需要查看真正的编组解决方案。