方便的文件处理/ Rails

时间:2014-06-01 05:34:50

标签: ruby-on-rails ruby ruby-on-rails-4

我现在正在寻找一个方便的方法,或者甚至更好,一个宝石,这将允许我CRUD档案。

具体需求是:

  • :text字符串创建文件。 (和控制文件类型。例如test.js
  • 如果:text
  • 发生了更新,请编辑文件(重写)
  • 基本上是整个CRUD Powerhouse。

现在,我当然知道没有Magic Willie可以独自完成这一切,我只是在寻找一个正确的方向,从哪里开始。

使用案例

我们有一个documents控制器,其中包含变量:

:title
:body
:user_id

:body(简单的text_area输入)包含一些.js代码。如何根据用户输入的test.js创建文件(例如:body)。

E.g。只需创建文件=> File.open('text.js', 'w') { |file| file.write(@something.body) }

到目前为止我在这里

def create

  @script = current_user.scripts.build(script_params)

  # Creating Folder (if it doesn't exist already)
  directory_name = "#{Rails.root}/public/userscripts/#{@script.user_id}"
  Dir.mkdir(directory_name) unless File.exists?(directory_name)

  # Write the file with model attribute :source
  File.open("public/userscripts/#{@script.user_id}/#{@script.name}.user.js", 'w') { |file|  file.write(@script.source) }



end

1 个答案:

答案 0 :(得分:1)

Paperclip将允许您附加文件,您也可以更新它们。

您可以创建临时文件,将其分配给附件属性,然后保存模型。

    # create and write a file with the contents you want
    open "/tmp/tmpfile" do |f|
      model.attachment = f
      model.save!
    end

您可以将其放在before_save过滤器中,以便始终更新文件附件。

class Model < ActiveRecord::Base
  has_attached_file attachment
  before_save :update_attachment

  def update_attachment
    File.open("/tmp/tmpfile", 'w') { |file|  file.write(self.body) }
    open "/tmp/tmpfile" do |f|
      self.attachment = f
      self.attachment_content_type = "text/javascript"
    end
  end