I’m trying to set up a very basic system for uploading files to my rails 3.1 app. Before people start throwing paperclip and carrierwave links at me, let me say that this is NOT the solution that I am looking for. I have read quiet a few posts on this topic, however, all the code I saw was either depreciated in rails 3.1 or I just did not understand how people came to a solution to this problem.
Updated view/form: (haml)
%h1 File Upload
= form_for :upload,:url=>{:action => 'uploadFile'},:html => { :multipart => true } do |f|
%p
%label{:for => "upload_file"} Select File
\:
\#{f.file_field 'datafile'}
= f.submit "Upload"
Updated controller:
class UploadController < ApplicationController
def index
render :file => 'upload/uploadfile.haml'
end
def uploadFile
file_param = params[:upload][:datafile]
post = DataFile.save(file_param)
render :text => "File has been uploaded successfully"
end
end
Updated model
class DataFile < ActiveRecord::Base
def self.save(upload)
# Changed Default Destination: [__RAILS_DIR__/public/data]
name = "public/data/" + upload.original_filename
# can haz data directory?
require 'FileUtils'
FileUtils.mkdir_p(File.dirname(name))
File.open(name, "wb") { |f| f.write(upload.read) }
end
end
The Solution:
Above is the correct code I used to add simple uploading functionality to my rails 3.1 app
You are passing unnecessary argument “file” to the uploadFile method. It’s an action and passing argument to it is not possible. Just remove the “file” argument.