我正在尝试使用我的一个模型中的一些用户输入信息创建一个Tempfile:
after_create :form_to_csv
def form_to_csv
temp_file = Tempfile.new('test_temp.csv', encoding: 'utf-8')
begin
self.input_data.split('\n').each do |line|
temp_file.write line
end
temp_file.rewind
self.build_input_data_file(file: Rails.root.join("temp_file.path}").open)
ensure
temp_file.close
temp_file.unlink
end
end
表单数据作为文本存储在input_data
字段中。我成功地将我的数据写入Tempfile但是将它附加到模型上很麻烦 - 我一直试图将nil
附加到我的模型中。我的主要问题是我生成的文件有一个路径:
/var/folders/jw/7pjlw_212qd3s4ddfj1zvnpr0000gn/T/test_temp.csv20170502-78762-1eh23ml
它不能使用Rails.root.join和CarrierWave docs here中建议的附件方法(从本地文件上传)。
答案 0 :(得分:0)
我的错误是我试图在Tempfile对象的filename参数中分配.csv扩展名。相反,我需要传递这样的数组:
def form_to_csv
temp_file = Tempfile.new(['test_temp', '.csv'], encoding: 'utf-8')
begin
self.input_data.split('\n').each do |line|
temp_file.write line
end
temp_file.rewind
self.build_input_data_file(file: Rails.root.join(temp_file.path).open)
ensure
temp_file.close
temp_file.unlink
end
end