2016-08-23 3 views
0

Я пытаюсь загрузить файл с Carrierwave с формой и контроллером, который отделен от модели Carrierwave.Carrierwave не загружает изображение для модели с помощью другого контроллера

Мой загрузчик LogoUploader установлен на атрибут :logo модели установки.

class Setting < ActiveRecord::Base 
    validates :name, presence: true, uniqueness: true 

    mount_uploader :logo, LogoUploader 
end 

миграции:

class AddLogoToSettings < ActiveRecord::Migration 
    def change 
    add_column :settings, :logo, :string 
    end 
end 

У меня есть форма в views/feedback/configure.html.erb для обработки изображения загрузить через FeedbackController:

<%= form_tag({:action => 'save_configuration'}, id: 'form-save') do %> 
<div class="form-group"> 
     <%= file_field_tag "settings[cac_hlogo]" %> 
     <%= image_tag(@cac_hlogo.logo.url) if @cac_hlogo.logo? %> 
    </div> 

    <div class="form-actions"> 
     <%= submit_tag t('save').titlecase, class: 'btn btn-primary' %> 
    </div> 
    <% end %> 

FeedbackController:

class FeedbackController < ApplicationController 
    def configure 
    @cac_hlogo = Setting.find_or_create_by(name: 'cac_hlogo') 
    end 

    def save_configuration 
    cac_hlogo = Setting.find_or_create_by(name: 'cac_hlogo') 
    cac_hlogo.logo = params[:settings][:cac_hlogo] 

    respond_to do |format| 
     if cac_hlogo.save 
     format.html { redirect_to configure_feedback_index_path, notice: 'Configuration Saved.' } 
     else 
     format.html { redirect_to root_path, notice: 'There was a problem saving configuration.'} 
     end 
    end 
    end 
end 

Я разрешаю атрибут :logo быть обновлен в SettingsController:

class SettingsController < ApplicationController 
    before_action :authenticate_user! 
    load_and_authorize_resource 

    def setting_params 
    params.require(:setting).permit(:logo) 
    end 

end 

По какой-то причине файл фактически никогда не загружает, и я понятия не имею, почему. Параметры, которые я передаю в форме, выглядят правильно, но ничего не загружается. Что мне не хватает? Примечание. Я использую локальное хранилище, и все мои другие загрузчики Carrierwave в приложении работают нормально.

ответ

0

Решение было добавить enctype: "multipart/form-data" к form_tag так: <%= form_tag({:action => 'save_configuration'}, enctype: "multipart/form-data", id: 'form-save') do %>

 Смежные вопросы

  • Нет связанных вопросов^_^