2011-02-01 4 views
2

텍스트 컬럼에 객체를 직렬화하고 싶습니다.레일즈를 N 레코드의 직렬화 된 객체로 구축하기

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

그래서 어떻게 직렬화 된 객체에 첨부 파일의 X 번호를 저장 않습니다 API를 통해

, 나는 PARAMS를 얻을?

mailThing = MailThing.create (: 첨부 파일 => myAttachmentsSerizliedIfANY)

내가 할 노력하고있어이 작업을하는 방법에 대한

@myAttachmentsSerizliedIfANY = nil 

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

    @myAttachmentsSerizliedIfANY << params[:attachment + i ] 

    i += 1 
end 

어떤 제안? 덕분에

+0

정보를 조금 더 주시겠습니까? 데이터베이스 컬럼의 유형은 무엇입니까? 첨부 파일에 어떤 유형의 데이터가 있습니까? – jamuraa

+0

그들은 모든 종류의 전자 메일 첨부 파일 일 수 있습니다. 데이터베이스 열은 무엇이든 될 수 있습니다 ... 텍스트 또는 얼룩 – AnApprentice

답변

4

좋아요, 그래서 나는 당신의 다른 질문 중 몇 가지를 보았고, 나는 당신을 위해 뭔가를 할 수 있다고 생각합니다. 이 기능을 사용하려면 데이터베이스에 열을 추가해야합니다 (나는 attachment_storage라고 부름).이 열은 일련 번호를 붙여서 저장할 수 있습니다.

기본적으로 첨부 파일을 먼저 배열에 가져온 다음 문자열로 직렬화하여 데이터베이스에 저장할 수 있습니다.

여기에 몇 가지 코드가 있습니다. 여기

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

우리가,

그런 다음 데이터베이스에 넣어 원하는 등, :attachment1, :attachment2 같은 기호로를 설정하는 문자열과 to_sym를 사용하여 PARAMS 해시에 대한 기호를 구축하고 [ActiveRecord 문서] [1]의 "배열, 해시 및 기타 텍스트 필드에 표시 할 수없는 다른 객체 저장"섹션에 명시된대로 저장할 수 있습니다.

직렬화가 작동하려면 모델에 serialize :attachment_storage을 추가 한 다음 위와 같이 다른 매개 변수처럼 할당해야합니다. 그런 다음 모델을 저장하면 직렬화됩니다.

+0

고마워요! 나는 이것을 시험해 볼 때까지 기다릴 수 없다. 지금 나는 Mail 객체의 나머지를 db로 가져 오는 방법을 알아 내려고하고있다. 새로운 질문은 여기에 : http://stackoverflow.com/questions/4870184/rails-storing-a-actionmail-mail-new-object-in-the-database 내가 이것을 해결하면이 문제에 뛰어들 것이다. 감사합니다 – AnApprentice

+0

열 형식은 무엇입니까 – AnApprentice

+0

첨부 파일 저장을위한 열 형식은 무엇입니까? – AnApprentice

관련 문제