2009-03-03 6 views
2

Je configure un site Rails en utilisant map.resources et map.resource, et je rencontre une limitation (pour autant que je sache au moins).Problèmes avec les ressources de routage

Voici mon itinéraire actuel.

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 

Dans un sens général, c'est mon résultat recherché:
/nom d'un client/l'action
appelle le contrôleur clients, et transmet le nom du client comme une sorte de hachage qui est le même.

/nom-client/nom-projet/action
Appelle le contrôleur de projets, mais passe le nom-client comme un hachage qui reste le même. Il veut passer cela comme un id.

J'espère garder ma structure d'URL très basique, donc:

  1. client-name = Yahoo
  2. project-name = login page

/nom d'un client/- Cela devrait utiliser la méthode Clients.show.
/client-name/edit - Cela devrait utiliser la méthode Clients.edit.
/nom-client/nom-projet - Cela devrait utiliser la méthode Projects.show.
/nom-client/nom-projet/édition - Cela doit utiliser la méthode Projects.edit.

Bien que mon cheminement actuel, il est interprété comme tel:
/nom d'un client/projets - Cette méthode utilise la Projects.index.
/clients/nom-client - Utilise la méthode Clients.show.


J'apprécie vraiment toute aide qui est donnée.

+0

J'essaie de démêler votre question, mais je suis coincé essayer de comprendre ce que "une sorte de hachage qui est le même" signifie. – jdl

+0

Je veux inclure la méthode before_filter qui peut être utilisée, il devrait donc être en mesure de lire, params [: client] ou params [: project] pour tirer leurs limaces. Tu comprends maintenant? Je peux vous montrer un exemple si vous le souhaitez. – Garrett

Répondre

1

La cartographie des ressources n'est pas très puissante. De plus, il ajoute le nom de la ressource (entreprise, projet, etc.) dans l'URI. Il peut encore être un moyen de parvenir à ce que vous essayez de faire en utilisant la cartographie des ressources, mais je pense qu'il est plus facile d'utiliser la cartographie régulière:

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' 
+0

Je suis sûr que c'est ce que vous cherchez. Si vous n'utilisez pas toutes les méthodes RESTful, je n'utiliserais pas de ressources. Juste aller avec le routage standard. –

+0

Dans Rails 3 mon problème est corrigé :) – Garrett

Questions connexes