为Rails应用程序创建上传控制器操作

时间:2013-02-13 21:09:24

标签: ruby-on-rails file-upload rails-routing

我正在制作一个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

我的revenue_models_controller(尚未开发动作,现在只是重定向):

...
def upload
    redirect_to revenue_models_path
end

我已按照Uploading filesRouting files的导轨指南操作,当我尝试打开已修改的/新视图时,我一直收到错误:

    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文件,对其进行解析,并有条件地将每个数据行添加到我的数据库中,这是我在上传操作中可以指定的印象。请帮忙!

1 个答案:

答案 0 :(得分:0)

请使用form_for代替form_tag

其他什么是multi_doc field/attribute的{​​{1}}?我猜是revenue_model的{​​{1}}。

第三,表格中的实例变量field/attribute在哪里?

第四,您必须首先在您要显示表单的操作/控制器上创建模型的实例变量,例如revenue_model

尝试此代码后:

revenue_model

问题非常混乱,试图澄清您的问题,指明您的操作名称和视图中文件的名称。

问候!