簡體   English   中英

Rails導入CSV-沒有路線匹配

[英]Rails Import CSV - No Route Matches

我是Rails的新手。 我目前正在嘗試將數據從csv文件導入到我的Rails應用程序中。 但是,當我在線上查看示例和指南時,出現了錯誤: 沒有路由與{:action =>“ import_csv”,:controller =>“ lists”}匹配,但是我已經將其添加到route.rb中。 如果我的代碼導致“沒有路線匹配”錯誤,誰能幫助我檢查哪里出了問題? 以下是我的文件:

listing_controller.rb

def import_csv

require 'fastercsv' 

respond_to do |format|
@csv=params[:file].read
@n=0
@parsed_file = CSV.parse(csv)
@parsed_file.each  do |row|
  @user_new = User.new
  @user_new.first_name = row[0]
  @user_new.last_name = row[1]
  @user_new.email = row[2]
  @user_new.address = row[3]
  @user_new.city = row[4]
  @user_new.state = row[5]
  @user_new.zip = row[6]
  @user_new.country = row[7]
  @user_new.notes = row[8]
  @user_new.birthday = row[9]
  @user_new.home_number = row[10]
  @user_new.mobile_number = row[11]
  @user_new.list_id = list_id
  @user_new.save
  @n=@n+1
  GC.start if n%50==0
    flash[:notice] = "CSV Imported Successfully, with  #{n} records"                                
end

format.html { redirect_to lists_url }
  format.json { head :no_content }
end
  end

app / views / lists / show.html.erb

<%= form_for(:list, :url => list_import_csv_path,  :html => {:multipart => true}) do |f| %>
 <table>
    <tr>
        <td><label for="dump_file">Select a CSV File :</label></td>
        <td ><%= file_field_tag :file %></td>
    </tr>
    <tr>
        <td colspan='2'><%= submit_tag 'Submit' %></td>
    </tr>
</table>
<% end %>

routes.rb

  resources :lists do
    get 'import_csv'
    #match '/import_csv/:id' => 'lists#import_csv', :as => :import_csv
  end

耙路

    identities GET    /identities(.:format)                        identities#index
                  POST   /identities(.:format)                        identities#create
     new_identity GET    /identities/new(.:format)                    identities#new
    edit_identity GET    /identities/:id/edit(.:format)               identities#edit
         identity GET    /identities/:id(.:format)                    identities#show
                  PUT    /identities/:id(.:format)                    identities#update
                  DELETE /identities/:id(.:format)                    identities#destroy
newsletter_cancel GET    /newsletters/:newsletter_id/cancel(.:format) newsletters#cancel
      newsletters GET    /newsletters(.:format)                       newsletters#index
                  POST   /newsletters(.:format)                       newsletters#create
   new_newsletter GET    /newsletters/new(.:format)                   newsletters#new
  edit_newsletter GET    /newsletters/:id/edit(.:format)              newsletters#edit
       newsletter GET    /newsletters/:id(.:format)                   newsletters#show
                  PUT    /newsletters/:id(.:format)                   newsletters#update
                  DELETE /newsletters/:id(.:format)                   newsletters#destroy
  list_import_csv GET    /lists/:list_id/import_csv(.:format)         lists#import_csv
            lists GET    /lists(.:format)                             lists#index
                  POST   /lists(.:format)                             lists#create
         new_list GET    /lists/new(.:format)                         lists#new
        edit_list GET    /lists/:id/edit(.:format)                    lists#edit
             list GET    /lists/:id(.:format)                         lists#show
                  PUT    /lists/:id(.:format)                         lists#update
                  DELETE /lists/:id(.:format)                         lists#destroy
            users GET    /users(.:format)                             users#index
                  POST   /users(.:format)                             users#create
         new_user GET    /users/new(.:format)                         users#new
        edit_user GET    /users/:id/edit(.:format)                    users#edit
             user GET    /users/:id(.:format)                         users#show
                  PUT    /users/:id(.:format)                         users#update
                  DELETE /users/:id(.:format)                         users#destroy

使用post而不是get config/routes.rb

您的表單是通過POST提交的,而路由是針對GET的。 無論是通過:method => :getform_for助手,或更改路線post (我寧願前者雖然,因為你請求的數據,在服務器上不改變任何東西)。

要為表單指定GET方法,您需要

<%= form_for (:list, :url => list_import_csv_path, :method => :get, :html => {:multipart => true}) do |f| %>

我也不確定強制啟動垃圾回收是否是個好主意-如果在處理請求時啟動垃圾回收會破壞您的性能。 剩余的對象應自動收集垃圾。

我還將提取User導出部分(可能是在User model上的靜態方法中):

require 'faster_csv'

class User < ActiveRecord::Base
  ...
  def self.import_from_csv(file)
    CSV.parse(file).each do |row|
      u = User.new(:first_name => row[0], :last_name => row[1] ...etc)
      return false if !u.save
    end
  end
end

然后,在控制器中:

def import_csv
  respond_to do |format|
    if !User.import_from_csv(params[:file])
      format.html { render :show, :error => "Some error here" }
      format.json { render :json => "Some error here", :status => :unprocessable_entity }
    else
      format.html { redirect_to lists_url, :notice => "Import successful!" }
      format.json { :head => :ok }
    end
  end  
end

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM