2010-06-06 3 views
0

Je cet itinéraire:Changer le nom de param pour parent ressource imbriquée

resources :tags do 
     resources :comments 
end 

si l'action :create pour les commentaires a la forme suivante

tag_comments POST /tags/:tag_id/comments(.:format) 

Comment puis-je changer le nom de paramenter de :tag_id à :commentable_id?

+0

ce qui ne va pas avec les solutions ci-dessous? –

Répondre

2
map.tags do 
    resources :comments, :path_prefix => '/tags/:commentable_id' 
end 

ou via before_filter

before_filter :tag2commentable 

private 
def tag2commentable 
    params[:commentable_id] = params[:tag_id] unless params[:tag_id].blank? 
end 

mettre dans votre contrôleur

1

L'un d'eux est peut-être ce que vous voulez:

map.resources :commentables, :as => "tags", :collection => :comments 
map.resources :commentables, :as => "tags", :has_many => :comments 

Je suppose que ce dernier étant correct, ce qui résout à:

Mais je suppose que vos relations de modèle peuvent être vissées d'une certaine manière que cela n'a aucun sens. Avez-vous l'esprit de modifier votre message et ajouter des informations sur vos relations de modèle?

Je suppose avoir

map.resources :commentables, :has_many => :tags 

ou

map.resources :taggables, :has_many => :comments 

aurait plus de sens:

commentable_tags GET /commentables/:commentable_id/tags(.:format) {:action=>"index", :controller=>"tags"} 
taggable_comments GET /taggables/:taggable_id/comments(.:format) {:action=>"index", :controller=>"comments"} 
+0

Je pense que le problème de la définition du nom de la ressource comme autre chose que le nom de votre modèle est que les méthodes de l'URL polymorphe échoueront. Au moins c'est mon expérience. –

Questions connexes