【问题标题】:Create an upload controller action for Rails app为 Rails 应用程序创建上传控制器操作
【发布时间】:2017-06-10 07:32:03
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

    请使用form_for 代替form_tag。

    第二个multi_doc是field/attribute的revenue_model?。我猜是revenue_model 中的field/attribute。

    第三,你的实例变量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 %>
    

    这个问题非常令人困惑,试图澄清您的问题,指定您的操作名称和视图中的文件名称。

    问候!

    【讨论】:

    • 所以我的模型中没有这个文件上传的字段,我对如何将上传的文件从视图传递到控制器然后修改感到困惑。创建我的收入模型实例对我来说没有意义,因为我没有首先从上传的 Excel 文档中提取/解析多个条目,没有将任何属性传递给我的收入模型数据库。很抱歉让您感到困惑,希望对您有所帮助,谢谢您的帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-25
    • 1970-01-01
    • 1970-01-01
    • 2013-09-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多