Вот таким образом выглядит модель к которой в форме приаттачиваются файлы. По крайней мере так она выглядит у меня. :-)

new.html.erb
--------

<% form_for(@business_process, :html => { :multipart => true }) do |f| %>
...
    Полная диаграмма
    <%= f.file_field :diagram_whole_file_data %>

    Декомпозированная диаграмма
    <%= f.file_field :diagram_decomposed_file_data %>
...
    <%= f.submit "Create" %>
<% end %>

business_process.rb
----------------

class BusinessProcess < ActiveRecord::Base

  DIRECTORY_WHOLE = 'public/diagram_whole'
  DIRECTORY_DECOMPOSED = 'public/diagram_decomposed'

  after_save :process
  after_destroy :clenup

  def diagram_whole_file_data=(diagram_whole_file_data)
    @diagram_whole_file_data = diagram_whole_file_data
    @diagram_whole = DIRECTORY_WHOLE + "/#{self.id}-whole.svg"
  end

  def diagram_decomposed_file_data=(diagram_decomposed_file_data)
    @diagram_decomposed_file_data = diagram_decomposed_file_data
    @diagram_decomposed = DIRECTORY_DECOMPOSED + "/#{self.id}-decomposed.svg"
  end

  def path_diagram_whole
    File.join(DIRECTORY_WHOLE, "#{self.id}-whole.svg")
  end

  def path_diagram_decomposed
    File.join(DIRECTORY_DECOMPOSED, "#{self.id}-decomposed.svg")
  end

  #----------

  private

  def process
    # Сохранть общую диграмму
    if @diagram_whole_file_data
      create_directory DIRECTORY_WHOLE
      save_diagram_whole
    end

    # Сохранить декомпозированную диаграмму
    if @diagram_decomposed_file_data
      create_directory DIRECTORY_DECOMPOSED
      save_diagram_decomposed
    end
  end

  def cleanup
    Dir[File.join(DIRECTORY_WHOLE, "#{self.id}-*")].each do |filename|
      File.unlink(filename) rescue nil
    end

    Dir[File.join(DIRECTORY_DECOMPOSED, "#{self.id}-*")].each do |filename|
      File.unlink(filename) rescue nil
    end
  end

  def save_diagram_whole
    File.open(path_diagram_whole, 'wb') do |file|
      file.puts @diagram_whole_file_data
    end
  end

  def save_diagram_decomposed
    File.open(path_diagram_decomposed, 'wb') do |file|
      file.puts @diagram_decomposed_file_data
    end
  end

  def create_directory(dir_name)
    FileUtils.mkdir_p dir_name
  end

end

Это не конечный (читай не оптимизированный) вариант. Но новичкам в Рельсах будет интересно узнать как подгружаются файлы. :-)


Читайте также

  • Утилита для выбора зеркал пакетов в Archlinux



  • Последние новости


    План занятий

    Обучение детей от года до 3 лет плаванию, как правило, проходит в три этапа. На первом этапе ребенок должен адаптироваться к воде, избавиться от страха перед глубиной, неизвестной средой. Намного проще дети привыкают к бассейну, где есть бортики, вода теплая и прозрачная. Чуть сложнее дети адаптируются к открытым водоемам с темной и прохладной ...
    Читать далее »

    Гимнастика от 2 лет до 2 лет 6 месяцев

    1. Самостоятельная ходьба. 2. Бег вдогонку за взрослым или к взрослому в разном темпе. 3. Руки вверх, потянуться – «деревья большие большие», развести руки в стороны. 4. Ходьба по доске, приподнятой над полом на 15–20 см. 5. Приседания. 6. Подъем туловища с опорой на ладони в положении лежа на животе. 7. Хлопк...
    Читать далее »

    Проблема: ожоги, ушибы, травмы

    Немного повзрослев, ребенок начинает интересоваться источниками огня, что чревато ожогом. При незначительном ожоге необходимо поврежденный участок тела поместить под холодную проточную воду, а затем обработать антиожоговым аэрозолем. В период выздоровления применяют массаж, который способствует улучшению лимфо– и кровотока. В резуль...
    Читать далее »

    Проблема: плоскостопие

    Когда ребенок начинает ходить, его первые шаги могут быть омрачены плоскостопием. К сожалению, если эта болезнь наследственная, то волнения вполне обоснованны. И здесь без посещения детского врача ортопеда не обойтись. Его рекомендации относятся к укреплению подошвенного свода стопы вашего ребенка. Костная структура стопы ребенка ...
    Читать далее »

    Рефлекторные движения

    Рефлекторные гимнастические упражнения, В основе которых лежат врожденные двигательные рефлекторные реакции, проводятся первые три пять месяцев жизни ребенка, когда еще не утрачены безусловные двигательные рефлексы – «автоматическая походка», ладонно ротовой рефлекс, хоботковый рефлекс, сохранение равновесия, защитно оборонительные рефлексы. Рефлекторные гимнасти...
    Читать далее »

    Техника выполнения: растирание

    Прямолинейное растирание Выполняется концевыми фалангами одного или нескольких пальцев. Движение проводится прямолинейно одной рукой или обеими, иногда с отягощением. Круговое растирание Проводится с помощью круговых движений концевыми фалангами одного или нескольких пальцев. Кисть располагается с опорой на основании ладони, а манипуляции выполняют в сторону мизинца одной рук...
    Читать далее »

    Проблема: пупочная грыжа

    Пупочная грыжа – это патологическое состояние, в котором через несколько расширенное пупочное кольцо происходит выпячивание брюшины, сальника и даже кишечника. Причина заболевания следующая: вследствие дефекта передней брюшной стенки и пупочного кольца проявляется округлое или овальное выпячивание. Чаще факторами, провоцирующими повышение внутрибрюшного давления, являются кашель, запоры ...
    Читать далее »