Предотвращение повторения со сложными вложенными маршрутами / ресурсами в рельсах 3 - PullRequest
0 голосов
/ 15 июля 2011

В настоящее время у меня есть эти маршруты (упрощенная версия)

  resources :licenses, :except => [:show] do
    collection do
      post :search
      get :search
    end
    member do
      post :activate
      post :revoke
      post :suspend
    end
  end

  resources :clients, :except => [:show] do
    resources :licenses, :except => [:show] do
      collection do
        post :search
        get  :search
      end
      member do
        post :activate
        post :revoke
        post :suspend
      end
    end
  end

Где контроллер лицензий может иметь дело с вложенностью в клиенте или нет, и если это так, тогда доступны только эти клиентские лицензии.

Хотя это и не выглядит СУХОЙ, есть ли лучший способ для представления этих маршрутов, чтобы, если я изменяю подпись маршрутизации Лицензий, мне также не приходилось менять ее в клиентах?

1 Ответ

1 голос
/ 18 сентября 2011

Хорошо, я наконец-то потратил еще немного времени на изучение этого вопроса и вспомнил, что у самоцвета Devise (и других) есть собственные «помощники маршрута» (например, devise_for), поэтому я позаимствовал их метод и нашел его довольно практичным:

Для моего проекта это все в rout.rb, но методы 'helper' могут, возможно, пойти куда-нибудь еще, если потребуется.

module ActionDispatch::Routing

  class Mapper

    def report_routes
      resources :reports, :except => [:create] do
        member do
          get :download
        end
      end
    end

    def website_routes
      resources :websites do
        member do
          post :enable
          post :disable
        end
      end

    end

  end

end

MyApp::Application.routes.draw do

  website_routes

  report_routes

  resources :clients do
    website_routes
    report_routes
  end

end
...