【发布时间】:2011-01-17 09:52:51
【问题描述】:
我有一个名为 Search 的模型和一个名为 :search 的资源。我想将我的控制器命名为SearchController,而不是SearchesController。但是当我初始化一个 Search 实例时,Rails 假定它的路由必须是“/searches”。
我能做些什么来阻止这种情况吗?
【问题讨论】:
我有一个名为 Search 的模型和一个名为 :search 的资源。我想将我的控制器命名为SearchController,而不是SearchesController。但是当我初始化一个 Search 实例时,Rails 假定它的路由必须是“/searches”。
我能做些什么来阻止这种情况吗?
【问题讨论】:
这应该可行:
resources :search, :as => :searches
路由 url 以/search 开头,指向search 控制器并使用默认命名约定:
searches GET /search(.:format) {:controller=>"search", :action=>"index"}
POST /search(.:format) {:controller=>"search", :action=>"create"}
new_search GET /search/new(.:format) {:controller=>"search", :action=>"new"}
edit_search GET /search/:id/edit(.:format) {:controller=>"search", :action=>"edit"}
search GET /search/:id(.:format) {:controller=>"search", :action=>"show"}
PUT /search/:id(.:format) {:controller=>"search", :action=>"update"}
DELETE /search/:id(.:format) {:controller=>"search", :action=>"destroy"}
错误的原因是当表单只能访问模型实例时,它会尝试根据复数模型名称查找路由助手。在这种情况下,它尝试使用searches_path。如果我们保留默认路由名称并仅更改 url 和控制器,事情应该会奏效。
Relevant documentation(在“依赖命名路由”下)
【讨论】: