2015-05-23 1 views
1

Я пытаюсь добавить операторскую волну в мое приложение для обработки вложений от пользователей (pdf, doc и т. Д.), А не изображений). Я просмотрел несколько руководств и, хотя кажется, что работает, я не могу получить доступ к приложению через метод link_to или, следуя за созданием несущей канала url. При использовании моего приложения я сталкиваюсь с двумя странными вещами:Загрузка поля с возвратом несущей волны: nil

1) Предварительный просмотр ссылки (со ссылкой на всплывающее окно слева внизу в хроме, показывающем место назначения ссылки) показывает только localhost :: model/id, а не URL-адрес, который находится в загрузчике

2) Когда я просматриваю запись в консоли рельсов, столбец показывает нуль. Я добавил это в мои разрешенные параметры в контроллере.

Мой контроллер:

class Cms484sController < ApplicationController 
    before_action :set_cms484, only: [:show, :edit, :update, :destroy] 

    # GET /cms484s 
    # GET /cms484s.json 
    def index 
    @cms484s = Cms484.all 
    end 

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

    # GET /cms484s/new 
    def new 
    @cms484 = Cms484.new 
    end 

    # GET /cms484s/1/edit 
    def edit 
    end 

    # POST /cms484s 
    # POST /cms484s.json 
    def create 
    @cms484 = Cms484.new(cms484_params) 

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

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

    # DELETE /cms484s/1 
    # DELETE /cms484s/1.json 
    def destroy 
    @cms484.destroy 
    respond_to do |format| 
     format.html { redirect_to cms484s_url, notice: 'Cms484 was successfully destroyed.' } 
     format.json { head :no_content } 
    end 
    end 

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

    # Never trust parameters from the scary internet, only allow the white list through. 
    def cms484_params 
     params.require(:cms484).permit(:supplier_name, :supplier_addr, :supplier_city, :supplier_state, :supplier_zip, :frm_date, :document) 
    end 
end 

Мой загрузчик:

class FileUploader < CarrierWave::Uploader::Base 

     storage :file 

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

Моя форма: (сокращенно)

<%= f.file_field :file, multiple: true %> 

    <div class="actions"> 
    <input type="submit" name="commit" value="Complete Cms484" /> 
    </div> 
<% end %> 
</body> 
</html> 

Мой взгляд:

<p> 
    <strong>Sup name:</strong> 
    <%= @cms484.supplier_name %> 
</p> 
<%= link_to 'Document', @cms484.document.url %> | 
<%= link_to 'Edit', edit_cms484_path(@cms484) %> | 
<%= link_to 'Back', cms484s_path %> 

Любые идеи?

ответ

1

Carrierwave полагается на соглашение об именах вашего класса загрузчика. В вашем случае вы назвали его FileUploader.

Настройте разрешенные атрибуты из: документа: файл

def cms484_params 
    params.require(:cms484).permit(:supplier_name, :supplier_addr, :supplier_city, :supplier_state, :supplier_zip, :frm_date, :file) 
end 

По вашему мнению

<%= link_to 'Document', @cms484.file_url %> 
+0

На самом деле думал об этой проблеме на следующее утро. Разумеется, если вы будете придерживаться конвенции, как и вы, все работает! Спасибо за вашу помощь – PSCampbell