Carrierwave_Direct's direct_upload_form_for re

2019-08-07 12:01发布

问题:

I've been struggling with this for a couple of hours now. When using carrierwave_direct's direct_upload_form_for in my view, it returns me this error:

FileUploader Carrierwave Class:

class FileUploader < CarrierWave::Uploader::Base
  include CarrierWaveDirect::Uploader
end

ManualFile Model:

class ManualFile
  include Mongoid::Document
  mount_uploader :file, FileUploader

  field :name, :type => String
end

UploadController:

class UploadController < ApplicationController
    def manual_new
        @uploader = ManualFile.new.file
        @uploader.success_action_redirect = upload_edit_path
    end

    def manual_edit
        @myfile = ManualFile.new(key: params[:key])
    end
end

My View:

<%= direct_upload_form_for @uploader do |f| %>
  <%= f.file_field :file %>
  <%= f.submit %>
<% end %>

I can't understand what I'm doing wrong. I tried to follow this railscast. I'm using Ruby 1.9.3, Rails 3.2.3, Mongoid 3 with carrierwave gems pointing to github master.

回答1:

Apparently direct_upload_form_for works best with ActiveRecord. To make it work (or at least not crash) with Mongoid, I added the following lines to my file uploader.

include ActiveModel::Conversion
 extend ActiveModel::Naming

So in your case :

class FileUploader < CarrierWave::Uploader::Base
    include CarrierWaveDirect::Uploader

    include ActiveModel::Conversion
    extend ActiveModel::Naming
end