路由资源问题

时间:2009-03-03 06:03:51

标签: ruby-on-rails

我正在使用map.resourcesmap.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传递。

我希望保持我的网址结构非常基础,所以:

  1. client-name = yahoo
  2. project-name = login-page
  3. / 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方法。


    我真的很感激所给予的任何帮助。

1 个答案:

答案 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'