Reputation: 3113
everyone. Please, help me with carrierwave and Rails 4.
Model:
class MediaItem < ActiveRecord::Base
mount_uploader :media_item, MediaItemUploader
end
Schema:
create_table "media_items", force: true do |t|
t.string "file"
t.text "description", default: "", null: false
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
end
Uploader:
class MediaItemUploader < CarrierWave::Uploader::Base
def store_dir
"public/"
end
Controller:
class MediaItemsController < ApplicationController
def create
@media_item = MediaItem.new(media_item_params)
respond_to do |format|
if @media_item.save
format.html { redirect_to @media_item, notice: 'Media item was successfully created.' }
else
format.html { render :new }
end
end
end
Form:
= form_for @media_item, :html => {:multipart => true} do |f|
.field
= f.label :description
= f.text_field :description
.field
= f.label :file
= f.file_field :file
.actions
= f.submit 'Save'
The problem is that uploaded file does not appear in specified dir and "media_item.media_item_url" return empty string in a view. However, it save the recore into db:
select file, description from media_items;
#<ActionDispatch::Http::UploadedFile:0xba672374>|wetw
Upvotes: 0
Views: 856
Reputation: 3113
My mistake.
Instead
mount_uploader :media_item, MediaItemUploader
it must be
mount_uploader :file, MediaItemUploader
as "file" is a field name in db, not "media_item"
Upvotes: 2