19

私は Rails を学習中で、データベースやモデルを使用せずに CSV データを処理するファイル アップロード ページを作成しようとしています。また、Paperclip や Carrier-wave などの宝石を使用しないようにしています。

ある程度の進歩はありましたが、何らかの理由でコードが機能しません。に表示される CSV ファイルにあるレコードを取得できません。import.html.erb page.

ページのアップロード ボタンをクリックすると、localhost:3000/upload で、送信後に期待されるページに適切にリダイレクトされますが、ファイルの行が表示されません。

ページに CSV ファイルのレコードが表示されない理由がわかる人はいますか?

アップロード ファイル ビュー (index.html.erb):

<%= form_tag({:action => :import}, multipart: true) do %>
  <%= file_field_tag :file %>
  <%= submit_tag( "Import" ) %>
<% end %>

コントローラー (upload_controller.rb):

class UploadController < ApplicationController
  def index
  end

  def import
    rowarray = Array.new
    myfile = params[:file]

    CSV.foreach(myfile.path) do |row|
      rowarray << row
      @rowarraydisp = rowarray
    end
  end
end

結果ビュー (import.html.erb):

<% @rowarraydisp.each do |row| %>
  <%= row %>
<% end %>
<h1>File has been uploaded. Check</h1>
4

1 に答える 1

15
CSV.foreach(myfile.path) do |row|
  rowarray << row
  @rowarraydisp = rowarray
end

次のように記述します。

@rowarraydisp = CSV.read(myfile.path)

のドキュメントによるとCSV.read

CSV ファイルを配列の配列に丸呑みするために使用します。

ERBimport.html.erbの 2 つの異なる例で、ファイルが 2 回使用されます。実際のファイルと実際のコードは何ですか?

<% @rowarraydisp.each do |row| %>
  <%= row %>
<% end %>

CSV ファイルからブラウザに部分配列を送信しようとしますrowが、その ERB またはデータが何であるかがわからないため、データ行の内容以外に出力がどうなるかを判断するのは困難です。

于 2013-01-07T03:08:25.110 に答える