сохранение атрибута не-DB attr_accessor в Rails - PullRequest
0 голосов
/ 03 октября 2008

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

Ответы [ 3 ]

7 голосов
/ 03 октября 2008

Я предполагаю, что вы спрашиваете, будут ли данные, хранящиеся в атрибутах объектов 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
0 голосов
/ 17 апреля 2009

Это зависит от того, как вы передаете свои данные в задачу rake и почему. Если вы пытаетесь выполнить работу вне запроса, то есть не заставляя пользователя ждать, пока он не завершится, я рекомендую взглянуть на превосходную заставку Райана http://railscasts.com/episodes/128-starling-and-workling, чтобы узнать об очередях заданий.

Если это какая-то другая экзотическая причина, по которой вы должны использовать такие грабли, вы можете передать данные в качестве параметров командной строки. Это зависит от того, сколько данных и их сложность нужно передать, поскольку они могут быстро выйти из-под контроля.

Используя пример Даниила сверху:

thing = Thing.find (: первая) thing.data = "Something"

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

0 голосов
/ 03 октября 2008

Конечно, оно будет потеряно. Как вы думаете, куда уйдут данные, когда они умрут? К данным h (e) aven, откуда они всегда могут вернуться?

Я бы хотел знать, для чего вам нужны данные, но окончательный ответ, вероятно, состоит в том, что данные принадлежат БД, если только это не большие двоичные данные, такие как изображения, где вы должны сохранить их в файловой системе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...