Rails中的非DB attr_accessor属性持久性
时间:2020-03-06 15:04:47 来源:igfitidea点击:
我有一个应用程序,其中使用attr_accessor来保存将传递给rake任务的模型的临时数据。看到没有用于这些属性的数据库字段,并且没有从数据库数据中计算出这些属性,attr_accessor数据是否将持久存在并且可用于rake任务?如果我需要重新启动服务器会发生什么情况,那么数据是否会丢失然后又没有保存到数据库中呢?还是要实现这一点,我是否需要保存到临时文件或者数据库字段?
解决方案
当然会丢失,我们认为数据丢失后会流向何处?总是可以从哪里返回到数据h(e)aven?
我想知道我们需要什么数据,但最终的答案可能是数据属于db,除非它是大型二进制数据(例如图像),我们应该将其保存在文件系统中。
我假设我们要问的是,通过Rake任务访问来自Web请求的ActiveRecord对象的属性中存储的数据是否可用?
不,他们不会。该数据甚至无法用于下一个Web请求。如果我们两次加载同一条记录,该数据甚至将不存在。
class Thing < ActiveRecord::Base attr_accessor :data end #try this in script/console thing = Thing.find(:first) thing.data = "Something" thing = Thing.find(:first) puts thing.data -> nil
这取决于我们如何将数据传递给rake任务以及原因。如果我们尝试根据请求进行带外工作,这意味着不要让用户等到完成后,我建议在此处查看Ryan出色的截屏视频http://railscasts.com/episodes/128-starling-工作以了解作业队列。
如果出于其他一些特殊原因,则必须使用rake这样的数据,则可以将数据作为命令行参数传递。这取决于我们需要传递多少数据及其复杂性,因为它们可能很快就会失控。
从上面使用Daniel的示例:
事= Thing.find(:first)
Thing.data ="东西"
rake myraketask Thing_id =#{thing.id} data = ## {thing.data}