передать файл скрепке на заднем конце [рельсы] - PullRequest
2 голосов
/ 06 октября 2011

Я использую скрепку для прикрепления нескольких файлов к объекту Entry.

Class Asset < ActiveRecord::Base

    belongs_to :entry

    has_attached_file :asset, ...

Прекрасно работает, когда пользователь загружает файлы через вложенную форму.Тем не менее, у меня есть определенные случаи, когда файл загружается не через форму ввода, а в результате флеш-записи звука.Аудио записывается и загружается асинхронно в папку my / tmp.В результате на моем сервере появилось несколько файлов, которые не были загружены с помощью скрепки.

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

Как бы вы это сделали?Большое спасибо!

1 Ответ

8 голосов
/ 06 октября 2011

Обычно загруженный файл передается вашему контроллеру как объект File в хеше params, который затем передается конструктором с помощью attributes= методу-установщику, созданному в Paperclip has_attached_file - в случае вашей модели Asset#asset= (возможно, стоит немного уточнить эти имена).

Нет, это не ответ на ваш вопрос, но он приводит нас к ответу. Зная, что вы можете понять, что можете вызывать этот метод в любое время, указав File в качестве параметра. E.g.:

class SomeController < ActionController::Base
  def some_action
    @some_asset = Asset.find 123 # (for example)

    file_path = '/tmp/path/to/your/file'
    file      = File.open(file_path, 'r')

    @some_asset.asset = file
    @some_asset.save
  end
end

Надеюсь, это полезно!

...