Я следую руководству Railscast по загрузке Carrierwave, и установили одинаковые файлы. Загрузка работает нормально, если я загружаю файл через консоль, но моя форма не публикуется правильно.
У меня есть базовая форма, которая включает в себя:
<%= f.label :receipt %><br>
<%= f.file_field :receipt %>
Rails 4 автоматически включает в форму тег enctype="multipart/form-data"
.
Когда я отправляю форму, я смотрю на журналы сервера. Загрузка отображается в параметрах:
"receipt"=>#<ActionDispatch::Http::UploadedFile:0x007fcb25c624e0 @tempfile=#<Tempfile:/var/folders/ty/yks2xd9n76z9p49qzprvt1900000gn/T/RackMultipart20130903-53712-17zblz4>,
@original_filename="Avatar.jpg",
@content_type="image/jpeg",
@headers="Content-Disposition: form-data; name=\"expense[receipt]\"; filename=\"Avatar.jpg\"\r\nContent-Type: image/jpeg\r\n">},
Однако оператор INSERT не содержит никакого упоминания о моем поле или файле квитанции. Нет никакой ошибки. Файл также не загружается в каталог, который я указал в Carrierwave.
Любые идеи о том, что здесь может быть не так? Это не дубликат этого ответа, который был проблемой с jQuery Мобильный. Я действительно озадачен тем, что происходит.
Редактировать: мне, вероятно, следует включить и мою модель:
class Expense < ActiveRecord::Base
mount_uploader :receipt, ReceiptUploader
end
У меня также есть класс загрузчика запасов, созданный Carrierwave:
class ReceiptUploader < CarrierWave::Uploader::Base
storage :file
def store_dir
"receipts"
end
end
Изменить 2: вот мой контроллер для создания расходов:
def new
@expense = Expense.new
end
def create
@expense = Expense.new(expense_params)
respond_to do |format|
if @expense.save
format.html { redirect_to @expense, notice: 'Expense was successfully created.' }
format.json { render action: 'show', status: :created, location: @expense }
else
format.html { render action: 'new' }
format.json { render json: @expense.errors, status: :unprocessable_entity }
end
end
end