0

ファイルを選択するフォームを設定する次の Ruby コードがあります。

    <%= form_for :import, :url=>{:controller=>"products", :action=>"import"}, :html => { :multipart => true } do |f| %>
        <div class= "field">
            <%= f.file_field :import %>
            <%= submit_tag 'Import' %>
        </div>

コントローラーでは、ローカル ドライブから選択したファイルを呼び出そうとしています。この行は特定のファイルに対して機能します。

    book = Spreadsheet.open 'c:/source.xls' 

しかし、フォームから選択されたファイルをコントローラーで呼び出す方法がわかりません。

何か案は?

4

3 に答える 3

0

現在機能しているコードは次のとおりです。

def import

require 'spreadsheet'
Spreadsheet.client_encoding = 'UTF-8'
import_file = params[ :import ][ :import ]
file = FileUploader.new
file.store!(import_file)
book = Spreadsheet.open "#{file.store_path}"
sheet1 = book.worksheet 0
sheet1.each 1 do |row|
@product = Product.new(:code => row[0], :name => row[1], :status => row[2], :account => current_user.account).save

終わり

于 2012-10-01T18:52:30.263 に答える
0

次のプラグインのいずれかを使用して、ファイルのアップロードを処理します。

attachement_fuおよびpaperclip

これがペーパークリップのrailscastに関するチュートリアルですhttp://railscasts.com/episodes/134-paperclipそしてここに添付ファイルのチュートリアルがありますhttp://clarkware.com/cgi/blosxom/2007/02/24#FileUploadFu

于 2012-10-01T19:07:34.727 に答える
0

ファイル データはparams[:import][:import]、実際のファイルではなく にあります。ファイルがアップロードされると、「c:/...」のようなものは何もありません。

必要に応じて、新しいファイルを開き、そのデータを書き込みます。

または、carrierwave などを使用して、保存したファイルの実際のパスを取得します。

于 2012-10-01T01:25:18.253 に答える