Rails构建N个记录的Serialized对象

时间:2011-02-01 23:58:46

标签: ruby-on-rails ruby ruby-on-rails-3

我想序列化文本列中的任何对象。

通过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 个答案:

答案 0 :(得分:4)

好的,所以我看了一些你的其他问题,我想我可能会有一些适合你的东西。对于这个工作,你需要在数据库中的列(我称之为attachment_storage),您序列化后,他们就可以存储这些附件。

基本上,您希望首先将附件放入数组中,然后将其序列化为字符串,以便将其存储到数据库中。

这是完成这项工作的一些代码。

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

下面我们使用了串和to_sym把它变成像一个符号构建符号params哈希表:attachment1:attachment2,等等。

然后要放置在数据库中,所以可以存储它作为在[ActiveRecord的文档]注意到[1]下的部分“保存阵列,散列,并在文本列其它非可映射对象”。

为了使系列化工作,你需要添加serialize :attachment_storage到你的模型,然后保存它,你会如上分配给它,就像任何其他参数。然后保存您的模型,它将为您序列化。