2014-07-11 3 views
0

내 응용 프로그램에 xlsx 파일을 저장하려고했습니다. 나는 'acts_as_xlsx'라는 보석을 사용하고있다. xlsx로 파일을 생성하고 보내고 싶다. 문제는 문서가 백그라운드에서 생성되고보기를 렌더링하지 않기 때문입니다. xlsx 파일을 반환해야하는 스크립트입니다.xlsx 파일을 레일에 저장

내가 좋아하는 뭔가를 시도 :

file = File.open("report.xlsx", relation.to_xlsx, type: "application/vnd.openxmlformates-officedocument.spreadsheetml.sheet")

그러나 File.open의 두 번째 인수는 문자열이어야합니다 때문에 오류를 반환합니다.

미리 감사드립니다.

답변

1

to_xlsx은 Axlsx 패키지를 반환해야합니다. 패키지는 자체 파일로 저장됩니다.

relation.to_xlsx.serialize("report.xlsx") 

그러나 전자 메일로 보내려면 첨부 파일로 저장하면됩니다. 당신은 파일로 저장 할 필요가 없습니다 :

class UserMailer < ActionMailer::Base 
    def export(users) 
    content = User.to_xlsx(data: users).to_stream.string 
    attachments["Users.xlsx"] = {mime_type: Mime::XLSX, content: content} 
    ... 
    end 
end 

또한, 위 알 수 있습니다, acts_as_xlsx 레지스터 당신을 위해 Mime::XLSX. 그래서 긴 마임 문자열 대신 사용할 수 있습니다.

+0

감사합니다. 컨트롤러 나 메일러를 사용하지 않고 스크립트로 파일을 생성하고있었습니다. 도움이되었습니다. 감사. 마지막으로 내 코드는 다음과 같습니다. relation_xlsx = relation.to_xlsx; relation_xlsx.serialize ("report.xlsx"); serialized_relation = relation_xlsx.to_stream; file = File.open ('report_streamed.xlsx', 'w'); file.write (serialized_relation.read) serialize가 true를 반환하므로 .to_xlsx 및 .serialize 메서드를 구분해야합니다. 따라서 나중에 시도하면 : relation_xlsx.to_stream true : TrueClass에 대해 정의되지 않은 메서드 to_stream을 반환합니다. – hcarreras

관련 문제