2012-01-27 105 views
3

我已成功建立了正確使用基本CRUD功能的站點。但是,當我嘗試將自定義方法添加到我的控制器時,我似乎無法將其掛接到link_to調用。我不斷收到method not found錯誤。如何在視圖中調用Rails控制器中的自定義方法

在控制器方法是這樣的:

def complete 
    return render :text => "Complete" 
end 

和我在查看通話看起來是這樣的:

<%= link_to 'Complete', complete_list_task_path(@list,@task) %> 

此相同的呼叫適合我的編輯方法,所以我不知道我做錯了什麼。當該方法不是基本的CRUD調用時,是否需要做特別的事情?

我的路由文件的唯一相關的部分看起來像這樣(列表和任務是嵌套的資源列表中包含了許多任務,而且任務屬於列表):

resources :lists do 
    resources :tasks 
end 

我也試圖加入post "complete" => "lists/:id/tasks/:id#complete", :as => "complete"到我的路線,看看它是否會幫助隱式地嘗試調用它,但我仍然有一個「方法未發現錯誤」。

任何幫助搞清楚如何進行此調用將不勝感激。謝謝!

+0

什麼是錯誤?將其添加到問題中。 – 2012-01-27 02:40:06

+1

請寄出'rake routes |的輸出grep complete' – davidb 2012-01-27 02:44:00

+0

我向底部表示這是一個「找不到方法的錯誤」,但我更加突出地在頂部添加了它。對困惑感到抱歉! – 2012-01-27 02:44:19

回答

4

您需要在路由器中聲明該方法,'resources'指的是7 crud動作(索引,新建,創建,編輯,更新,刪除,顯示)。

關閉我的頭頂,我想你需要:

resources :lists do 
    resources :tasks do 
    member do 
     post :complete 
    end 
    end 
end 

嵌套讓我不自信,但是這是你需要做的東西一般。

+0

快速問題:我怎樣才能在這個結構中添加'only'? 就像我想要的:只有「索引」和「完整」的任務? – Archarachne 2014-07-30 09:56:35

5

有關詳細信息,請參閱Rails路徑指南中的Adding More RESTful Actions;簡而言之,如果你想要路由識別標準方法以外的任何東西,你需要添加它。

相關問題