Проблемы с ресурсами маршрутизации - PullRequest
2 голосов
/ 03 марта 2009

Я настраиваю сайт Rails, используя map.resources и map.resource, и я сталкиваюсь с ограничением (насколько я знаю, по крайней мере).

Вот мой текущий маршрут.

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
Вызывает контроллер Clients и передает имя клиента в виде некоторого хеша, который совпадает.

/ client-name / project-name / action
Вызывает контроллер Projects, но передает имя клиента в виде хэша, который остается прежним. Он хочет передать это как идентификатор.

Я надеюсь, что моя структура URL будет очень простой, поэтому:

  1. client-name = yahoo
  2. имя-проекта = страница-логина

/ 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 Ответ

1 голос
/ 07 марта 2009

Сопоставление ресурсов не такое мощное. Кроме того, он добавляет название ресурса (компания, проект и т. Д.) В 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'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...