Ruby on Rails在routes.rb中每页有多个方法?

时间:2012-10-08 06:57:57

标签: ruby-on-rails

愚蠢的问题......我在一个页面上有两个具有两个不同功能的表单,我的views / projects / new.html.erb文件。到目前为止,我只实现了一个,可以选择“创建”一个新项目。我想添加另一个函数来对同一页面上显示的记录进行排序,例如:

<%= link_to "Category", { :controller => "projects", :action => "sortTable", :filter => "Category" }, :remote => true %>

- 我的routes.rb文件:

Docside::Application.routes.draw do
  resources :projects
  resources :categories
  #get "home/index"
  root :to => "projects#new"
  match 'project/new',:controller=>"projects",:action=>"create"
end

但是我收到错误“No route matches {:action =&gt;”sortTable“,:controller =&gt;”projects“}”。当我尝试添加“match'project / new'时,:controller =&gt;”projects“,:action =&gt;”sortTable“”我的其他功能不起作用,并且创建功能搞砸了。我该怎么办?

2 个答案:

答案 0 :(得分:2)

试试:

resources :projects do
  collection do
    post :sortTable
  end
end

看看这个guide

答案 1 :(得分:2)

对于给定的路径和方法组合,您只能有一条路线。您尝试在同一路径上定义多个路由,因此只有其中一个路由可用(第一个路径)。如果您为每个操作使用不同的路径(而不是所有这些操作的项目/新路径,那么您应该没问题。请注意与现有路径的冲突)

如果你坚持使用rails的惯例,你也会让生活变得更轻松(如果其他人开始使用它,代码会更容易阅读)。例如,resources :projects已经为创建操作创建了一条路径。可以像这样添加其他操作

resources :projects do
  collection do
    get :sort_table
  end
end

为sort_table操作设置一个收集路由(即一个与特定项目无关的路由),并为您设置一个URL帮助程序(sort_table_projects_path)。您可以使用其他语法 - 我建议您查看路由guide