0

我正在制作一个 Rails 应用程序,并希望添加一个上传功能,允许用户通过 Excel 电子表格一次上传多个条目,而不是一次输入一个条目。

理想情况下,我希望在 new.html.erb 文件的底部添加一个单独的上传/提交部分(粗体部分是上传 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

而我的收入模型控制器(还没有开发动作,现在只是一个重定向):

...
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.

二 什么是multi_docafield/attributerevenue_model?。我猜是一个 field/attributerevenue_model

第三,表单中的实例变量revenue_model在哪里?

第四,您必须首先在显示表单的操作/控制器上创建模型的实例变量,例如@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 回答