2010-08-19 4 views
2

나는 news_ownload와 같은 몇 가지 모델을 has_many comments : as => : commentable로 보유하고 있습니다. 댓글 belongs_to : 댓글 가능 : 다형성 : 의견과 마찬가지로 구독도 있습니다. 따라서 내 경로는 다음과 같습니다.여러 모델에 대한 반복 경로 DRYing

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 

... 

건조가 가능한 방법이 있습니까? 나는 routes.rb의 다음 상단에

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

을 정의하고 comment_resources를 호출 시도했지만이 제대로 클래스/네임 스페이스되지 않기 때문에 그것은 나에게 더러운 보인다. 당신은 뉴스 및 다운로드 모두 정확히 같은 내부 루트가있는 경우

답변

3

1), 당신은 그렇지 않으면 (레일-4의 일부로 포함됩니다) https://github.com/rails/routing_concerns 볼 수 있습니다)

%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를 만들 수 있습니다 :

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

아, 날짜에보고해야 ... – sandrew

0

정상적인 상태였습니다. routes.draw do/end 블록 내에 메서드를 정의하여 전역 네임 스페이스에서 꼬이지 않도록 할 수 있습니다.

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 

부터 촬영 : http://symmetricinfinity.com/2013/04/16/drying-up-your-api-routes-in-rails.html

관련 문제