【发布时间】:2011-06-14 20:50:33
【问题描述】:
我正在开发一个带有管理部分和公共部分的 Rails 应用程序。在公共部分,我只想解析索引并显示路线
resources :services, :only => [:index, :show]
但是,当我点击新操作的标准 URL 时,它会解析为 ID 为“新”的显示操作。即http://foo.com/services/new 返回错误“找不到 ID=new 的服务”。无论如何我可以告诉 rails 不要解析 /services/new 吗?
我已经试过了
resources :services, :only => [:index, :show], :except => :new
和
resources :services, :except => :new, :only => [:index, :show]
没有成功。
预计到达时间(根据要求): 我的整个路线文件(无 cmets):
MyApp::Application.routes.draw do
resources :services, :only => [:index, :show]
resources :packages,:only => [:index, :show]
get "pages/home"
get "pages/about"
get "pages/help"
root :to => 'packages#index'
namespace "admin" do
get "pages/home"
get "pages/about"
get "pages/help"
resources :services
match "/services/:id/add_to_package/:package_id" => "services#add_package", :as => :add_package_to_service, :via => :post, :id => /\d+/, :package_id => /\d+/
match "/services/:id/remove_from_package/:package_id" => "services#remove_package", :as => :remove_package_from_service, :via => :post, :id => /\d+/, :package_id => /\d+/
resources :packages
match "/packages/:id/add_service/:service_id" => "packages#add_service", :as => :add_service_to_package, :via => :post, :id => /\d+/, :service_id => /\d+/
match "/packages/:id/remove_service/:service_id" => "packages#remove_service", :as => :remove_service_from_package, :via => :post, :id => /\d+/, :service_id => /\d+/
resources :users
root :to => 'pages#home'
end
end
【问题讨论】:
-
我会在路由文件或控制器中使用
redirect,因为通常会考虑 url -
你能发布整个路线文件吗?
-
也许我看错了,但是“不解决路线”是指返回 404?在生产模式下,如果你在做 Service.find(params[:id),那么“Couldn't find Service with ID=new”将被替换为 404 .... 所以它的基本目的是相同的,告诉世界这个页面不存在。
-
我可能会从我的主要项目中走出来,但我正在尝试使用 rspec 解决测试问题 - 具体来说,我正在尝试让
{ :get => "/service_packages/new" }.should_not be_routable通过(不破坏其他测试)
标签: ruby-on-rails routing url-routing new-operator