我正在使用map.resources
和map.resource
设置Rails网站,我遇到了限制(据我所知至少)。
这是我目前的路线。
map.with_options :conditions => { :subdomain => true } do |sub|
sub.root :controller => 'company'
sub.resource :company do |company|
company.resources :clients, :path_prefix => nil, :name_prefix => nil, :collection => { :sort => :post } do |clients|
clients.resources :projects, :path_prefix => ":client/:project"
end
end
sub.resource :user, :collection => { :logout => :get }
end
一般来说,这是我想要的结果:
/ client-name / action
调用客户端控制器,并将客户端名称作为某种相同的哈希值传递。
/ client-name / project-name / action
调用Projects控制器,但将客户端名称作为保持不变的哈希值传递。它希望将其作为id传递。
我希望保持我的网址结构非常基础,所以:
/ client-name / - 这应该使用Clients.show
方法
/ client-name / edit - 这应该使用Clients.edit
方法
/ client-name / project-name - 这应该使用Projects.show
方法
/ client-name / project-name / edit - 这应该使用Projects.edit
方法。
虽然我目前的路线是这样解释的:
/ client-name / projects - 这是使用Projects.index
方法
/ clients / client-name - 这是使用Clients.show
方法。
我真的很感激所给予的任何帮助。
答案 0 :(得分:1)
资源映射功能不强大。此外,它还在URI中添加了资源(公司,项目等)的名称。可能仍有一种方法可以使用资源映射来实现您尝试做的事情,但我认为使用常规映射更容易:
map.connect ':client', :controller => 'clients', :action => 'show'
map.connect ':client/edit', :controller => 'clients', :action => 'edit'
map.connect ':client/:project', :controller => 'projects', :action => 'show'
map.connect ':client/:project/edit', :controller => 'projects', :action => 'edit'