У меня есть приложение, в котором attr_accessor используется для хранения временных данных для модели, которые будут переданы задаче rake. Видя, что для этих атрибутов нет поля базы данных и они не вычисляются на основе данных базы данных, будут ли данные attr_accessor сохраняться и быть доступными для задачи rake? Что произойдет, если мне потребуется перезапустить сервер - данные будут потеряны, если они не сохранены в базе данных? Или для этого мне нужно сохранить во временном файле или в поле базы данных?





Конечно, они будут потеряны, как вы думаете, куда уходят данные, когда они умирают? К данным h (e) aven, откуда его всегда можно вернуть?
Я хотел бы знать, для чего вам нужны данные, но окончательный ответ, вероятно, заключается в том, что данные принадлежат базе данных, если только это не большие двоичные данные, такие как изображения, где вы должны сохранить их в файловой системе.
Я предполагаю, что вы спрашиваете, будут ли доступны данные, которые хранятся в атрибутах объектов ActiveRecord, происходящих из веб-запросов, при доступе к ним через задачу Rake?
Нет, они не будут. Эти данные не будут доступны даже для следующего веб-запроса. Этих данных даже не будет, если вы загрузите одну и ту же запись дважды.
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
Да, @BenSaufley, спасибо. Цвет обозначает символ, а не локальную переменную. Прочтите о символах
Это зависит от того, как вы передаете свои данные в задачу rake и почему. Если вы пытаетесь выполнить работу с запросом вне канала, то есть не заставляете пользователя ждать, пока он не будет завершен, я рекомендую взглянуть на отличный скринкаст Райана здесь http://railscasts.com/episodes/128-starling-and-workling, чтобы узнать об очередях заданий.
Если это какая-то другая экзотическая причина, вы должны использовать такие грабли, вы можете передавать данные в качестве параметров командной строки. Это зависит от того, сколько данных и их сложности вам нужно передать, поскольку они могут быстро выйти из-под контроля.
Используя пример Даниила сверху:
вещь = Thing.find (: первый) thing.data = "Что-то"
rake myraketask thing_id=#{thing.id} data=#{thing.data}
Следует ли перед
dataставить двоеточие? В чем разница?