Ruby on rails 将临时文件上载到Rails中的Carrierwave

Ruby on rails 将临时文件上载到Rails中的Carrierwave,ruby-on-rails,ruby,ruby-on-rails-5,Ruby On Rails,Ruby,Ruby On Rails 5,我正在尝试在我的一个模型中使用一些用户输入的信息创建临时文件: 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

我正在尝试在我的一个模型中使用一些用户输入的信息创建临时文件:

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文档中建议的附件方法(从本地文件上载)

我的错误是,我试图在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

您是否尝试将
temp\u fie
对象直接分配给
文件
选项?