Если посмотреть на источник камня, с которым вы связались, он не справляется с сохранением / обработкой файла, просто связывает его в TinyMCE.
Я бы порекомендовал объединить камень с Скрепкой (https://github.com/thoughtbot/paperclip)
class Datafile < ActiveRecord::Base
has_attached_file :file, :styles => { :medium => "300x300>", :thumb => "100x100>" }
end
Тогда вы можете просто передать ему объект file в update_attributes:
@datafile.update_attributes(:file => params[:file])
и назовите его в представлении с помощью
@datafile.file.url(:medium)
Если вы хотите продолжать обрабатывать его самостоятельно, он сохраняется в вашей файловой системе в каталоге / оригинальном имени файла от пользователя ... что, вероятно, оставляет вас открытым для атак с использованием инъекций и неправильных имен файлов! Если вы сгенерируете его самостоятельно, вы можете использовать класс Dir для просмотра правильного имени файла в файловой системе?
EDIT
Хорошо, учитывая поправку к вопросу, вот как должен выглядеть код вашего контроллера:
class TinymceAssetsController < ApplicationController
def create
@datafile = DataFile.create(file: params[:file])
render json: {
image: {
url: @datafile.file.url(:medium)
}
}
end
end
В вашем примере вы не создаете экземпляр объекта @datafile, так что это ноль. Вам нужно либо извлечь DataFile из базы данных, либо создать его экземпляр. По сути, Paperclip абстрагирует обработку файла, поэтому он похож на обычный атрибут. Вам все еще нужно создать объект в базе данных и т. Д., К которому он относится!