Rails строят сериализованный объект из N записей - PullRequest
2 голосов
/ 02 февраля 2011

Я хочу сериализовать любые объекты в текстовых столбцах.

Через API я получаю параметры:

params[:attachments] -- this can be 0 or 1 or 3, or 100+ etc...
params[:attachment1]...params[:attachment2] ... params[:attachmentN]

Так как мне сохранить X # вложений в сериализованном объекте?

mailThing = MailThing.create (: attachments => myAttachmentsSerizliedIfANY)

Я пытаюсь сделать:

@myAttachmentsSerizliedIfANY = nil

i = 0
attachmentCount = params[:attachments].to_i
while i < attachmentCount do

   @myAttachmentsSerizliedIfANY << params[:attachment + i ]

   i += 1
end

Любые предложения о том, как заставить это работать? спасибо

1 Ответ

4 голосов
/ 02 февраля 2011

Хорошо, поэтому я посмотрел на некоторые другие ваши вопросы, и я думаю, что у меня может быть что-то, что будет работать для вас. Чтобы это работало, вам понадобится столбец в базе данных (я назову его attachment_storage), где вы можете хранить эти вложения после их сериализации.

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

Вот код для этого.

attachment_storage = []
(1..params[:attachments].to_i).each do |attachment_num|
   attachment_storage << params["attachment#{attachment_num}".to_sym]
end

Здесь мы строим символы для хэша params, используя строку и to_sym, чтобы превратить его в символ типа :attachment1, :attachment2 и т. Д.

Затем вы хотите поместить в базу данных, чтобы вы могли сохранить ее, как указано в [Документация ActiveRecord] [1] в разделе «Сохранение массивов, хэшей и других не отображаемых объектов в текстовых столбцах».

Чтобы сериализация работала, вам нужно добавить serialize :attachment_storage к вашей модели, а затем, чтобы сохранить ее, вы должны назначить ее так же, как любой другой параметр, как указано выше. Затем сохраните вашу модель, и она будет сериализована для вас.

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