在Rails中将Tempfile上传到Carrierwave

时间:2017-05-02 18:29:50

标签: ruby-on-rails ruby ruby-on-rails-5

我正在尝试使用我的一个模型中的一些用户输入信息创建一个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中建议的附件方法(从本地文件上传)。

1 个答案:

答案 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