2016-03-12 2 views
1

У меня проблема с самолетом-носителем. Extension_whitelist, похоже, не работает.Внутренний белый список не работает

def extension_whitelist 
    %w(csv) 
    end 

У меня нет подсказки, почему это не работает. Неважно, какой тип файла я импортирую, он никогда не вызывает ошибку. Вот остальная часть моего кода:

class AttachmentUploader < CarrierWave::Uploader::Base 
    storage :file 

    def store_dir 
    "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" 
    end 

    def extension_whitelist 
    %w(csv) 
    end 

end 

И контроллер (в основном ясно, подмости с форматированием и отвечает)

class PackagesController < ApplicationController 
    before_action :set_package, only: [:show, :edit, :update, :destroy] 

    # GET /packages 
    # GET /packages.json 
    def index 
    @packages = Package.all 
    end 

    # GET /packages/1 
    # GET /packages/1.json 
    def show 
    end 

    # GET /packages/new 
    def new 
    @package = Package.new 
    end 

    # GET /packages/1/edit 
    def edit 
    end 

    # POST /packages 
    # POST /packages.json 
    def create 
    @package = Package.new(package_params) 

    respond_to do |format| 
     if @package.save 
     format.html { redirect_to @package, notice: 'Package was successfully created.' } 
     format.json { render :show, status: :created, location: @package } 
     else 
     format.html { render :new } 
     format.json { render json: @package.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # PATCH/PUT /packages/1 
    # PATCH/PUT /packages/1.json 
    def update 
    respond_to do |format| 
     if @package.update(package_params) 
     format.html { redirect_to @package, notice: 'Package was successfully updated.' } 
     format.json { render :show, status: :ok, location: @package } 
     else 
     format.html { render :edit } 
     format.json { render json: @package.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

    # DELETE /packages/1 
    # DELETE /packages/1.json 
    def destroy 
    @package.destroy 
    respond_to do |format| 
     format.html { redirect_to packages_url, notice: 'Package was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

    private 
    # Use callbacks to share common setup or constraints between actions. 
    def set_package 
     @package = Package.find(params[:id]) 
    end 

    # Never trust parameters from the scary internet, only allow the white list through. 
    def package_params 
     params.require(:package).permit(:name, :description, :category_id) 
    end 
end 

Поиск ответов я также видел:

def content_type_whitelist 
    /csv\// 
    end 

но это тоже не работает. Любые идеи, что может быть проблемой? Кроме того, есть ли другой простой способ реализовать это?

@EDIT Проблема решена: я довольно давно сообщил об этой ошибке, и она была недавно исправлена.

ответ

0

Вы можете использовать эту функцию в модели

validates_attachment_content_type :attachment, :content_type => 'text/plain' 

также узнать, что вы хотите, чтобы белый список здесь полный список типов файлов http://www.sitepoint.com/web-foundations/mime-types-complete-list/

+0

Проблема заключается в том, что тип "text/plain" не так специфичен, как я хочу. Мне нужно, чтобы это было «x отдельное значение», где x был бы символом пунктуации, выбранным из списка. Хотя, если я проверяю первую строку данного документа (без заголовков) для определенного количества слов (которые всегда должны быть одинаковыми), разделенных заданным значком препинания, это может сработать. Но есть проблема, мне сначала придется загрузить этот файл у пользователя, и этого я стараюсь избегать. – Kappa

2

метод должен быть вызван extension_white_list и не extension_whitelist.

На главной ветке Это недавно было переименовано в extension_whitelist (см. commit), но это изменение еще не превратилось в общедоступный камень.

+0

Пробовал оба, перечисленные extension_whitelist, потому что это было в официальных заметках. – Kappa

+0

попробовал 'extension_whitelist', и теперь он работает. – Lowryder

0

Глядя на ваши комментарии, драгоценный камень File_validators является то, что вы ищете: https://github.com/musaffa/file_validators

Вы сможете проверить файлы перед загрузкой (размер и тип содержимого).

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