2012-01-27 57 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;简而言之,如果你想要路由识别标准方法以外的任何东西,你需要添加它。

相关问题