2008-10-03 35 views
0

我有一个应用程序,其中attr_accessor用于保存将传递给rake任务的模型的临时数据。看到这些属性没有数据库字段,并且它们不是从数据库数据计算的,attr_accessor数据是否会持续存在并可用于rake任务?如果我需要重新启动服务器,会发生什么情况 - 如果数据没有保存到数据库,数据是否会丢失?或者关闭它,我是否需要保存到临时文件或数据库字段?Rails中的非数据库attr_accessor属性持久性

回答

7

我假设您询问在通过Rake任务访问它们时,存储在源自Web请求的ActiveRecord对象的属性中的数据是否可用?

不,他们不会。这些数据甚至不会提供给下一个网络请求。如果您加载相同的记录两次,该数据甚至不会存在。

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 
+0

应该`data`收到一个冒号?有什么区别? – 2012-10-02 18:01:26

-3

当然,它会丢失,你认为数据在它死后的位置在哪里?对于数据h(e)从哪里可以始终返回?

我想知道你需要什么数据,但最终的答案可能是数据属于数据库,除非它是大的二进制数据,如图像,你应该把它保存在文件系统中。

-1

这取决于您如何将数据传递给rake任务以及原因。如果你试图在请求的带外进行工作,这意味着不要让用户等待其完成,那么我建议看看Ryan在这里的优秀屏幕录像http://railscasts.com/episodes/128-starling-and-workling以了解工作队列。

如果它的其他一些奇特的原因,你必须使用这样的耙子,你可以传递数据作为命令行参数。这取决于您需要传递多少数据及其复杂性,因为它可能会很快失控。

使用丹尼尔的例子从上面:

的事情= Thing.find(:第一) thing.data = “东西”

rake myraketask thing_id=#{thing.id} data=#{thing.data}