Oleg Antonyan
Oleg Antonyan

Reputation: 3113

Carrierwave not saving the file on disk

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

Answers (1)

Oleg Antonyan
Oleg Antonyan

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

Related Questions