【问题标题】:How to call a custom method in a Rails controller from a View如何从视图调用 Rails 控制器中的自定义方法
【发布时间】:2012-01-27 02:37:54
【问题描述】:

我已成功建立一个正确使用基本 CRUD 功能的站点。但是,当我尝试向控制器添加自定义方法时,我似乎无法将其连接到 link_to 调用。我不断收到method not found 错误。

Controller 方法如下所示:

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

我在视图中的调用如下所示:

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

同样的调用适用于我的 Edit 方法,所以我不确定我做错了什么。当方法不是基本的 CRUD 调用时,我需要做一些特别的事情吗?

我的路由文件中唯一相关的部分是这样的(List 和 Task 是嵌套资源。List 有很多任务,而 task 属于一个列表):

resources :lists do
    resources :tasks
end

我还尝试将post "complete" =&gt; "lists/:id/tasks/:id#complete", :as =&gt; "complete" 添加到我的路由中,看看是否有助于隐式尝试调用它,但我仍然收到“方法未找到错误”。

我们将不胜感激任何有关如何拨打电话的帮助。谢谢!

【问题讨论】:

  • 错误是什么?将其添加到问题中。
  • 请发布rake routes | grep complete的输出
  • 我在底部说这是一个“未找到方法错误”,但我在顶部更显眼地添加了它。很抱歉造成混乱!
  • 是的,照@davidb 所说的去做。如果该方法不在您的路由文件中,则不会被找到。

标签: ruby-on-rails ruby view controller


【解决方案1】:

详情请参阅 Rails 路由指南中的 Adding More RESTful Actions;简而言之,如果您希望路由识别标准方法以外的任何内容,则需要添加它。

【讨论】:

    【解决方案2】:

    你需要在router中声明方法,'resources'指的是7个crud action(index、new、create、edit、update、delete、show)。

    我想你需要:

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

    嵌套让我不那么自信,但这是你需要做的一般事情。

    【讨论】:

    • 快速提问:如何将“仅”添加到此结构中?就像我希望 :tasks 只有“索引”和“完成”?
    猜你喜欢
    • 2012-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多