2010-08-19 4 views
2

J'ai quelques modèles comme News et Downloads qui ont beaucoup de commentaires: as =>: commentable. Le commentaire appartient à: commentable et est: polymorphe. Comme les commentaires, il y a des abonnements. Donc, mes itinéraires ressemblent à ceci:Séchage répétée des routes pour plusieurs modèles

resources :news do 
    resources :comments do 
    post :like, :on => :member 
    delete :like, :on => :member 
    end 
    resources :subscriptions 
    ... 
end 

resources :downloads do 
    resources :comments do 
    post :like, :on => :member 
    delete :like, :on => :member 
    end 
    resources :subscriptions 
    ... 
end 

... 

est-il un moyen de DRY ça? J'ai essayé de définir

def comment_resources 
    resources :comments do 
    # ... 
    end 
    resources :subscriptions 
end 

à haut puis de routes.rb puis appeler comment_resources mais il me semble sale, car il n'est pas un espace de noms/dans une classe correctement.

Répondre

3

1) Si vous avez exactement les mêmes routes intérieures dans les deux nouvelles et téléchargements, vous pouvez faire

%w(news downloads).each do |res| 
    resources res do 
    resources :comments do 
     post :like, :on => :member 
     delete :like, :on => :member 
    end 
    resources :subscriptions 
    ... 
    end 
end 

2) Sinon, vous pouvez regarder https://github.com/rails/routing_concerns (sera inclus dans le cadre des rails-4):

concern :commentable do 
    resources :comments do 
    post :like, :on => :member 
    delete :like, :on => :member 
    end 
    resources :subscriptions 
end 

resources :news, concerns: :commentable do 
    ... 
end 
resources :downloads, concerns: :commentable do 
    ... 
end 
+2

Oh, j'aurais regardé à la date ... – sandrew

0

Vous étiez sur la bonne voie. Vous pouvez définir la méthode dans le bloc routes.draw do/end afin qu'elle ne soit pas emmêlée dans l'espace de noms global.

Application.routes.draw do 
    def comment_resources 
    resources :comments do 
     post :like, :on => :member 
     delete :like, :on => :member 
    end 
    resources :subscriptions 
    ... 
    end 

    resources :downloads do 
    comment_resources 
    end 

    resources :news do 
    comment_resources 
    end 
end 

Extrait de: http://symmetricinfinity.com/2013/04/16/drying-up-your-api-routes-in-rails.html

Questions connexes