2010-07-07 5 views
1

J'ai une application Rails 3 très simple avec un modèle User géré par Devise et un modèle Notes. En ce moment, l'URL et le routage ressemble à ceci:Ressources imbriquées sans noms de contrôleurs dans l'URL

# url 
/users/MEMBERNAME/notes/TITLE-OF-NOTE 

# routing 
resources :users do 
    resources :notes 
end 

Mais je voudrais que les urls à ressembler à ceci, comment l'apparence de routage comme dans ce cas?

# url 
/MEMBERNAME/TITLE-OF-NOTE 

Mise à jour:

Merci, maintenant je découvert un nouveau problème cependant. Dans mes formes, j'ai ce code:

<%= form_for([@user, @note]) do |f| %> 

et dans mon contrôleur je réoriente comme ceci:

format.html { redirect_to([@user, @note], :notice => 'Note was successfully created.') } 

Dans ces deux cas, lorsque j'utilise @user, @note les anciens urls sont encore présents. Savez-vous comment traduire le formulaire et les redirections pour utiliser la structure membre/titre?

Merci d'avance!

Répondre

5

Vous pouvez utiliser un itinéraire personnalisé ici:

get "/:user_id/:id", :to => "notes#show", :as => :short_user_note 

Hope this helps!

Mise à jour:

Pour utiliser la nouvelle route nommée:

# => /USER_NAME/NOTE_NAME 
redirect_to short_user_note_path(@user, @note) 

# => /user/USER_NAME/note/NOTE_NAME 
redirect_to user_note_path(@user, @note) 
# OR 
redirect_to url_for([@user, @note]) 
# OR 
redirect_to [@user, @note] 

Ainsi, la règle générale est que si vous passez un tableau d'objets active_record comme ci-dessous pour #redirect_to, ou #url_for #form_for methods, la méthode #polymorphic_url est appelée en interne et génère la route RESTful standard.

+0

Merci pour la réponse. J'ai mis à jour ma question ci-dessus. – Alfred

+0

J'ai mis à jour la réponse, j'espère que cela aide –

+0

Merci, m'a beaucoup aidé! –

5

Vous pouvez le comportement des itinéraires que vous êtes après avec des aides de route travaillant dans Rails 3 avec comme ce qui suit:

resources :users, :path => '' 
resources :users, :path => '', :only => [] do 
    resources :notes, :path => '', :except => [:index] 
end 

Voir mon blog post pour les détails sur la façon dont je suis arrivé à cette solution.

Questions connexes