2014-01-08 76 views
0

我創建了(讀取生成)腳手架。在同一個生成的控制器中,我定義了一個自定義方法,它只是在控制檯中執行一個puts命令。我怎樣稱呼這個方法?我在哪裏設置相關方法的路線?我試圖用ajax調用這個方法,但是我一直沒有找到資源(404)。如何在控制器中設置路由到自定義方法?

路線:

resources :projects do 
    collection do 
     put 'export_excel' 
    end 
    end 

控制器:

def export_excel 
    puts 'yay from controller' 
end 

前端:

exportExcel: function(){ 
      $.ajax({ 
       type: "POST", 
       url: "/projects/export_excel", 
       async: false, 
       success: function(){ 
        console.log('yay!'); 
       }, 
       error: function(){ 
        console.log('nay!'); 
       } 
      }); 
     } 
+0

類型POST =類型PUT!。改變路徑爲'export_excel'而不是放置(但實際上,因爲它不改變資源等,但要求一些東西,它應該可能是'get') – Doon

回答

2

請問您的自定義的方法上的所有記錄AKA collection或單個記錄進行操作又名member

resources :models do 
    collection do 
     get 'custom_method' 
    end 
    end 


resources :models do 
    member do 
     post 'custom_method' 
    end 
    end 

看到http://guides.rubyonrails.org/routing.html#adding-more-restful-actions基於評論更多信息

路線,你可以通過你的resources定義提供了一個塊添加自定義方法/更新

resources :projects do 
    collection do 
    get 'export_excel', as: :export 
    end 
end 
exportExcel: function(){ 
      $.ajax({ 
       type: "GET", 
       url: "/projects/export_excel", 
       async: false, 
       success: function(){ 
        console.log('yay!'); 
       }, 
       error: function(){ 
        console.log('nay!'); 
       } 
      }); 
     } 

由於http動詞需要匹配,(在你的ajax中有POST,路線有PUT)。我認爲它應該都是GET。但不管他們需要匹配

也不能使用puts從控制器內,您可能需要在配置使用Rails的記錄器,或使一些返回給瀏覽器,如

def export_excel 
    render text: 'yay from controller' 
end 
+0

沒問題,所以控制器名稱是Projects 。在那裏我想定義一個名爲exportExcel的動作。基本上我試圖調用以下URL:localhost:3000/projects/exportExcel我不需要在我的url中的ID。 – Dragan

+0

是的,我這樣做,但我仍然不斷收到「NetworkError:404 Not Found - localhost:3000/projects/export_excel」 – Dragan

+0

你可以顯示耙路線嗎? – Doon

1

/routes.rb爲您的新控制器方法添加路由。

例如:在配置/ routes.rb中

resources :users do 
    collection do 
     put 'new_method_name' 
    end 
end 
+0

更新了我的問題 – Dragan

+0

您是否需要導出任何數據?你不能用ajax請求來做這件事。動詞也需要匹配。 '放'需要,如果這是你的路線 –

+0

我只是想調用一個函數,然後,使用紅寶石庫,將生成一個Excel並將返回給用戶。 – Dragan

相關問題