2016-07-03 6 views
0

Die Carrierwave speichert die hochgeladene Datei nicht im angegebenen Verzeichnis, und in der Datenbank ist der Wert NULL, obwohl sie einen neuen Datensatz erstellt hat. Wenn ich versuchte, ein validates in den Dateidaten zu setzen, sagt Fehlermeldung immer, dass ich leere Daten in das Formular setze, obwohl ich eine Datei wähle und der Dateiname neben der Taste angezeigt wird.ROR Carrierwave speichert keine Datei und NULL in DB

-Controller

class SelfServe::EmployeeFilesController < SelfServe::BaseController 
    def new 
    @file = EmployeeFile.new 
    @section = section 
    render 'self_serve/employees/modal_form' 
    end 

    def create 
    @file = EmployeeFile.new(employee: @employee) 

    if @file.save 
     flash[:notice] = 'Your file has been successfully uploaded.' 
    else 
     flash[:error] = 'Failed to upload you file, please check fields with error.' 
    end 
    @section = section 
    @associated_resource = @file 
    render 'self_serve/employees/modal_form_submit' 
    end 

    def edit 
    @file = EmployeeFile.find(params[:id]) 
    @section = section 
    render 'self_serve/employees/modal_form' 
    end 

    def update 
    @file = EmployeeFile.find(params[:id]) 

    if @file.update_attributes(secure_params) 
     flash[:notice] = 'Your file has been successfully updated.' 
    else 
     flash[:error] = 'Failed to save file, please check fields with error.' 
    end 
    @section = section 
    @associated_resource = @file 
    render 'self_serve/employees/modal_form_submit' 
    end 

    def destroy 
    @file = EmployeeFile.find(params[:id]) 

    if @file.destroy 
     flash[:notice] = 'File has been successfully deleted.' 
    else 
     flash[:error] = 'Failed to delete file.' 
    end 
    @section = section 
    render 'self_serve/employees/modal_destroy' 
    end 

    private 

    def section 
    'personal_files' 
    end 

    def secure_params 
    params.require(:employee_file).permit(:file) 
    end 
end 

Modell (ohne validates für: file)

class EmployeeFile < ActiveRecord::Base 
    belongs_to :employee 
    audited associated_with: :employee 
    mount_uploader :file, EmployeeFileUploader 
    validates :employee, presence: true 
end 

EmployeeFileUploader

class EmployeeFileUploader < CarrierWave::Uploader::Base 
    include CarrierWave::Meta 

    storage :file 

    process :store_meta => [{md5sum: true}] 

    def store_dir 
    "uploads/employee/#{model.id}/files" 
    end 

    # Override the filename of the uploaded files: 
    def filename 
    @name ||= "#{Digest::MD5.hexdigest(original_filename + Time.now.to_i.to_s)}.#{file.extension}" if original_filename.present? 
    end 

    def extension_white_list 
    %w(ods docx doc xls pdf txt jpg jpeg gif png) 
    end 

end 

Ansicht

<h4>Personal Files</h4> 

<% if @employee.files.any? %> 
    <div class="row"> 
     <div class="col-md-12"> 
      <%= link_to [:new, :self_serve, :employee, :employee_file], remote: true, class: 'btn btn-sm btn-success pull-right' do %> 
      <i class="fa fa-file"></i> Add File</a> 
      <% end %> 
     </div> 
     <hr/> 
    </div> 
    <table class="table table-striped"> 
     <thead class="bg-green-active"> 
      <th>Filename</th> 
      <th>Date Uploaded</th> 
      <th></th> 
     </thead> 
     <tbody> 
      <% @employee.files.each do |file| %> 
       <tr> 
        <td><%= file.file %></td> 
        <td><%= file.created_at %></td> 
        <td> 
         <%= link_to [:edit, :self_serve, :employee, file], remote: true, class: 'btn btn-xs btn-default' do %> 
         <i class="fa fa-edit"></i> Edit 
         <% end %> 
         <%= link_to [:self_serve, :employee, file], remote: true, method: :delete, class: 'btn btn-xs btn-default', data: { confirm: 'Are you sure to delete? This action cannot be undone. ' } do %> 
         <i class="fa fa-trash"></i> Delete 
         <% end %> 
        </td> 
       </tr> 
      <% end %> 
     </tbody> 
    </table> 
<% else %> 
    <div class="row"> 
    <div class="col-md-12"> 
     <%= link_to [:new, :self_serve, :employee, :employee_file], remote: true, class: 'btn btn-success pull-center' do %> 
     <i class="fa fa-plus"></i> No files uploaded yet, upload one now. 
     <% end %> 
    </div> 
    <hr/> 
    </div> 
<% end %> 

<% if @file.present? %> 

<div class="modal fade" id="file_form_modal" tabindex="-1" role="dialog"> 
    <div class="modal-dialog"> 
     <div class="modal-content"> 
      <%= simple_form_for @file, url: @file.new_record?? self_serve_employee_employee_files_path : self_serve_employee_employee_file_path(@file), :html => {:multipart => true}, remote: true do |f| %> 
       <div class="modal-header"> 
        <button type="button" class="close" data-dismiss="modal" aria-label="Close"> 
         <span aria-hidden="true">&times;</span> 
        </button> 
        <h4 class="modal-title"><%= (@file.new_record?? 'Add' : 'Edit') %> file</h4> 
       </div> 
       <div class="modal-body"> 
        <div id="modal_flash_messages"></div> 
        <div class="row form-group"> 
         <div class="col-md-6"> 
          <%= f.input :file %> 
         </div> 
        </div> 
       </div> 
       <div class="modal-footer"> 
        <button type="button" class="btn btn-default pull-left" data-dismiss="modal">Cancel</button> 
        <%= f.button :submit, 'Save changes' %> 
       </div> 
      <% end %> 
     </div> 
    </div> 
</div> 

<% end %> 

Ich habe auch ein anderes Problem, wenn es darum geht, einen neuen Rekord zu erstellen. Wie Sie sehen können, habe ich gerade .save verwendet, aber wenn ich .update_attributes (secure_params) verwendet habe, wird ein Fehler in Inspect Element> Network angezeigt, der besagt, dass die undefinierte Methode manipuliert wurde!

+0

Wie machst du remote und multipart? – Swards

Antwort

0

Sind Sie Whitelist-Parameter? Dies ist ein vereinfachter Blog Post Controller.

class PostsController < ApplicationController 

    def create 
    @post = Post.new(post_params) 

    if @memorial.save 
     flash[:notice] = "Your memorial was saved." 
     redirect_to creator_memorials_path 
    else 
     render :new 
    end 
    end 

    private 

    def post_params 
    params.require(:post).permit(:title, :description) 
    end 

end 
+0

die Struktur ist anders. krank Update mein Controller auf ganz ... – BLNK