0

リモートアクションの1つに奇妙な問題があります。フォームからアップロードされたCSVファイルを解析したいのですが。CSVファイルは正しく解析されており、約20秒かかります(CSVファイルにはダウンロードリンク付きのURLが含まれているため、問題ありません)。解析が成功した後、ビューが表示されません。面白いことに、フォームでcsvファイルが選択されていない場合にビューがレンダリングされます。

#Products Controller:
  def get_imported
     p=Product.new
     @tab = nil
     @tab = p.import_csv(params[:product][:csv_file],params[:product][:source]) unless params[:product][:csv_file].nil?
  end

#app/views/products/get_imported.js.coffee view:
    $('#results').html '<br/><div class="alert alert-info">
    <h4 class="alert-heading">Imported products:</h4>
    <% if @tab.blank? %>
        Error: No CSV file
    <% else %>
        <% for element in @tab %>
            <%= @tab.name %><br/>
        <% end %>
    <% end %>
    </div>'

csvファイルを選択してフォームを送信すると、次のエラーが表示されます。

    ActionView::MissingTemplate (Missing template products/get_imported, application/get_imported with {:locale=>[:en], :formats=>[:html], :handlers=>[:erb, :builder, :coffee]}. Searched in:
      * "/home/chmarus/Pulpit/test/app/views"
      * "/home/chmarus/.rvm/gems/ruby-1.9.3-head/gems/twitter-bootstrap-rails-2.1.0/app/views"
      * "/home/chmarus/.rvm/gems/ruby-1.9.3-head/gems/devise-2.1.2/app/views"
      * "/home/chmarus/.rvm/gems/ruby-1.9.3-head/gems/ckeditor-3.7.1/app/views"
    ):

レールがこのテンプレートを見つけられない理由がわかりません。ファイルが選択されていない場合、アラートは同じファイルから正しくレンダリングされます。

4

1 に答える 1

2

CSVファイルを送信する場合、要求はMIMEタイプHTMLであり、JSではありません(エラーメッセージに示されています:formats=>[:html])。これはおそらく、最近までAJAXリクエストを介してファイルを送信することができなかったという事実によるものです(回避策が必要でした)。

AJAXリクエストを介してCSVファイルを送信する場合は、jQuery AjaxFileUploadまたはgoogleのアドバイスをご覧ください。

それ以外の場合は、HTMLMIMEタイプを処理するようにしてください。

于 2012-07-14T16:29:07.517 に答える