0

Rails アプリを作成していますが、一度に 1 つのエントリを入力するのではなく、ユーザーが Excel スプレッドシートを使用して一度に複数のエントリをアップロードできるようにするアップロード機能を追加したいと考えています。

理想的には、new.html.erb ファイルの末尾に個別の Upload/Submit 部分を追加したいと考えていました (太字部分は Upload HTML.erb です)。

...
<div class="actions">
    <%= f.submit %>
</div>
<% end %>

**<div class="field">
    Or Upload Multiple Entries <br />        
    <%= form_tag({:action => :upload}, :multipart => true) do %>
        <%= file_field_tag 'multi_doc' %>        
    <% end %>
</div>**

ここに私のroutes.rbファイルがあります:

Dataway::Application.routes.draw do
    devise_for :users

    resources :revenue_models do
      get 'upload', :on => :collection         
    end

    root :to => "home#index"
end

そして、私の Revenue_models_controller (まだアクションをまったく開発していません。現在はリダイレクトのみです):

...
def upload
    redirect_to revenue_models_path
end

ファイルのアップロードルーティング ファイルの Rails ガイドに従っていますが、変更した /new ビューを開こうとするとエラーが発生し続けます。

    Routing Error
        No route matches {:action=>"upload", :controller=>"revenue_models"}
    Try running rake routes

rake route を実行すると、アップロード アクションのエントリが表示されます。

upload_revenue_models GET    /revenue_models/upload(.:format)   revenue_models#upload

最後に、複数のエントリを含む Excel ファイルをアップロードして解析し、条件付きで各データ行をデータベースに追加したいと思います。これは、アップロード アクションで指定できるという印象を受けました。助けてください!

4

1 に答える 1

0

form_for代わりに使用してくださいform_tag

2 番目multi_docの afield/attributeとは何revenue_modelですか?. field/attributeのだと思いrevenue_modelます。

第三に、インスタンス変数revenue_modelはフォームのどこにありますか?

4番目に、フォームを表示しているアクション/コントローラーで、モデルのインスタンス変数を最初に作成する必要があります@revenue_model = RevenueModel.new

このコードを試した後:

<%= form_for(@revenue_model, :method => :get, :html => {:multipart => true}, :url => { :controller => "revenue_models", :action => "upload"})) do |f| %>
 <%= f.file_field :multi_doc %>
 <%= f.submit :id => "any_id" %>
<% end %>

アクションの名前とビュー内のファイルの名前を指定して質問を明確にしようとして、質問は非常に紛らわしいです。

よろしく!

于 2013-02-13T22:51:06.023 に答える