2010-03-11 6 views
1

J'ai deux modèles - User et Entry - qui sont liés par une relation has_many (un utilisateur a beaucoup d'entrées). J'utilise le routage RESTful, et ont les éléments suivants dans mon dossier routes.rb:Forme partielle avec routes imbriquées

map.resource :user, :controller => "users" do |user| 
    user.resources :entries 
end 

Cela semble fonctionner, mais dans mon fichier _form partiel, quand je fais ceci:

form_for [@current_user, @entry] do |f| 
    # Form stuff 
end 

Il génère une URL comme ceci:

/user/entries.%23%3Cuser:0xb6a6aea8%3E

au lieu de

/user/entrées

Suis-je manque quelque chose?

Je devrais noter que les classes correctes sont appliquées au formulaire en faisant la création contre l'édition, ainsi il semble bien interpréter ce que je suis essayant à faire - c'est juste que je ne peux pas soumettre le formulaire à une URL invalide.

Répondre

0

Je l'ai compris. Au lieu de faire:

form_for [@current_user, @entry] do |f| 
    # Form stuff 
end 

je devais être faire:

form_for [:user, @entry] do |f| 
    # Form stuff 
end 

C'est, au lieu d'utiliser l'objet @current_user lui-même, je devais juste dire form_for ce que mon objet @entry a été scope à (dans ce cas, la classe user).

0

Il semble que vous ne puissiez pas imbriquer des ressources de la ressource (au singulier). Essayez de faire

map.resources :users do |user| 
    user.resources :entries 
end 

ailleurs, qu'il est préférable d'utiliser des ressources pour les utilisateurs.

+0

Je ne suis pas sûr que ce soit mieux. Quand un utilisateur regarde * leurs * entrées, je ne veux pas que l'ID d'utilisateur fasse partie de l'URL (c'est inutile et invite à falsifier). Autrement dit, je préférerais avoir/user/entries que/user/1/entries. – jerhinesmith

+0

J'avais tort: ​​vous pouvez imbriquer des ressources de la ressource. Mais si vous le faites, vous n'avez pas besoin d'écrire les deux objets dans votre formulaire_for (utilisateur et entrée). – uzzz

Questions connexes