2010-05-18 7 views
1

J'ai actuellement un fichier routes.rb qui ressemble à ceci:routes non standard dans Rails

map.resources :profiles do |profile| 
    profile.resources :projects, :has_many => :tasks 
end 

Et cela me donne des itinéraires comme ceci:

/profiles/:profile_id/projects/:project_id/tasks 

C'est proche de ce que je voulez, mais à la place de la section '/ profiles /: profile_id /' je veux juste avoir un nom d'utilisateur à la place de cela afin que l'itinéraire ressemble à quelque chose comme:

/:profile_user/projects/:project_id/tasks 

Comment puis-je réaliser quelque chose comme ça? J'ai regardé partout et n'ai rien trouvé sur la façon de faire cela, mais je n'ai peut-être pas cherché la bonne chose.

Répondre

0

vous pouvez utiliser la méthode with_options:

map.with_options(:path_prefix => ":profile_user", :name_prefix => "profile_") do |profile| 
    profile.resources :projects, :has_many => :tasks 
    end 

Et puis il vous donne des routes comme:

profile_project_tasks_path(user.username, project) 
# => /:profile_user/projects/:project_id/tasks 

new_profile_project_task_path(user.username, project) 
# => /:profile_user/projects/:project_id/tasks/new 

etc

+0

des thats impressionnant est exactement ce que je cherche. – trobrock

0

J'ai essayé quelques options en utilisant l'espace de noms ou de se connecter, mais il n'a pas travaillé ..

Si vous voulez vraiment faire ces routes, je pense que vous devez utiliser connecter et créer tous les itinéraires, comme ceci:

map.connect ':profile_user/projects/:project_id/tasks', :controller => :tasks, :action => :index, :method => :get 
map.connect ':profile_user/projects/:project_id/tasks/new', :controller => :tasks, :action => :new, :method => :get 
map.connect ':profile_user/projects/:project_id/tasks', :controller => :tasks, :action => :create, :method => :post