0

愚蠢的问题...我的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

但我收到错误“没有路线匹配 {:action=>"sortTable", :controller=>"projects"}”。当我尝试添加“ match 'project/new',:controller=>"projects",:action=>"sortTable" ”时,我的其他功能不起作用,并且创建功能搞砸了。我应该有什么?

4

2 回答 2

2

试试看:

resources :projects do
  collection do
    post :sortTable
  end
end

看看这个指南

于 2012-10-08T07:26:50.037 回答
2

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

如果你坚持 Rails 的约定,你也会让你的生活更轻松(如果其他人开始编写代码,代码会更容易阅读)。例如resources :projects,已经为 create 操作创建了一个路由。可以像这样添加其他操作

resources :projects do
  collection do
    get :sort_table
  end
end

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

于 2012-10-08T07:28:02.557 回答