7

私はRORを初めて使用します。終了するタスクがあります。

モデルは次のとおりです。

class File::DataImport < ActiveRecord::Base
  attr_accessible :created_by, :file_name, :file_source, :updated_at, :updated_by
end

コントローラーは次のとおりです。

class Files::DataImportsController < ApplicationController
  def index
  end

  def new
  end
end

そして、私が持っているビューはindexnewです。

データをアップロードするフィールドが必要です。データはサーバーに保存し、ファイルパスをデータベースの指定された列に保存する必要がありますfile_name。パスは、すべてのアップロード ファイルへのデフォルトである必要があります。

始め方に困っています。解決策を見つけるのを手伝ってください。これから学びます。

前もって感謝します。

4

3 に答える 3

9

デシベル/移行/20110711000004_create_files.rb

class CreateFiles < ActiveRecord::Migration
def change
  create_table :files do |t|
  t.string :name
  # If using MySQL, blobs default to 64k, so we have to give
  # an explicit size to extend them
  t.binary :data, :limit => 1.megabyte
  end
end
end

アプリ/コントローラー/upload_controller.rb

 class UploadController < ApplicationController
 def get
 @file = File.new
 end
 end

アプリ/ビュー/アップロード/get.html.erb

<% form_for(:file,
url: {action: 'save'},
html: {multipart: true}) do |form| %>
Upload your file: <%= form.file_field("uploaded_file") %><br/>
<%= submit_tag("Upload file") %>
<% end %>

アプリ/モデル/file.rb

class File < ActiveRecord::Base
def uploaded_file=(file_field)
self.name = base_part_of(file_field.original_filename)
self.data = file_field.read
end
def base_part_of(file_name)
File.basename(file_name).gsub(/[^\w._-]/, '')
end
end

アプリ/コントローラー/upload_controller.rb

def save
@file = File.new(params[:file])
if @file.save
redirect_to(action: 'show', id: @file.id)
else
render(action: :get)
end
end

アプリ/コントローラー/upload_controller.rb

def file
@file = File.find(params[:id])
send_data(@File.data,
filename: @File.name,
disposition: "inline")
end

アプリ/コントローラー/upload_controller.rb

def show
@file = File.find(params[:id])
end

アプリ/ビュー/アップロード/show.html.erb

<h3><%= @file.name %></h3>
<img src="<%= url_for(:action => 'file', :id => @file.id) %>"/>
于 2012-09-19T07:17:04.957 に答える
1

ペーパークリップのようなすでに利用可能なソリューションの1つを使用することを検討する必要があります:https ://github.com/thoughtbot/paperclipまたはcarrierwave:https ://github.com/jnicklas/carrierwave

Readmesの他に、優れたチュートリアルもあります。

http://railscasts.com/episodes/134-paperclip

http://railscasts.com/episodes/253-carrierwave-file-uploads

編集:自分で実装したいので、Githubで上記のソースを調べて、コードが何をしているのかを理解することをお勧めします。また、私はそれを自分で実装することはしませんが、あなたがあなたの理由を持っているなら、これはあなたを動かすかもしれません。

于 2012-09-18T21:00:01.473 に答える
0

キャリアウェーブなどのソリューションを検討することをお勧めします。

Githubページには、その使用方法に関する適切な説明が記載されていますが、これも優れたガイドです。

于 2012-09-18T20:59:02.230 に答える