如何实现用户通过表单创建文件然后在rails中下载?

时间:2014-07-26 22:04:18

标签: ruby-on-rails ruby file paperclip translation

我正在建立一个在线翻译平台。当作业完成翻译和保存时,我希望用户能够将翻译后的版本下载为文本文件。它目前保存在名为“target_text”的模型中的字符串中。

我知道在ruby中我可以使用这种方法:

File.open("translation.txt", 'w') {|f| f.write("my translated string") }

我假设我可以在“translation.txt”前面保存要保存的文件的位置,但我不确定我的应用程序中应该指定哪个文件夹?

此外,我希望将此文件附加到“作业”对象,方法与回形针可以附加文件的方式相同,不同之处在于它是启动服务器端。我应该怎么做呢?

我一直在谷歌搜索寻找答案,我想确保以最干净的方式做到这一点。我真的很感激指向一个好地方的方向来理解这个概念。

1 个答案:

答案 0 :(得分:0)

我不太明白这个问题,但我希望这有助于......

而不是使用

File.open("translation.txt", 'w') {|f| f.write("my translated string") }

尝试使用以下

Tempfile.open(['translation', '.txt'], Rails.root.join('tmp')) do |file|

# this will create a temp file in RAILS_ROOT/tmp/ folder
# you can replace the 'translation' text part to any auto generated text for example
# Tempfile.open([@user.id.to_s, '_translation.txt'] will create
# RAILS_ROOT/tmp/1_translation.1fe2ed.txt
# the 1fe2ed is generated by Tempfile to avoid conflicting

  begin
    file << "my translated string"
    # this creates the file
    # add all the processing you need here... cause the next ensure block
    # will close and delete this temp file... so that the tmp dir doesn't get big.
    # you can for example add the file to paperclip attachment

    @user.translation = file
    # assuming that user has paperclip attachment called translation
  ensure
    # close and delete file
    file.close
    file.unlink
  end
end

同时查看Tempfile docs ...这是我一直在使用的做法......不确定它是否是最好的......但它并没有创造迄今为止的任何问题 (即使使用回形针s3存储)