Rails 3, создайте новый маршрут для каждого ресурса - PullRequest
1 голос
/ 09 марта 2011

В проекте, над которым я работаю, я бы хотел добавить один и тот же маршрут для нескольких ресурсов. Я знаю, что могу сделать это

resources :one do
  collection do
    post 'common_action'
  end
end
resources :two do
  collection do
    post 'common_action'
  end
end  

У меня есть как минимум 10 разных ресурсов, которым нужен один и тот же маршрут, поскольку каждый контроллер будет выполнять одно и то же действие. Есть ли способ определить это менее последовательно?

Ответы [ 3 ]

6 голосов
/ 10 сентября 2012

лучший способ и поддержка рельсов 3,2

require 'action_dispatch/routing/mapper'
module ActionDispatch::Routing::Mapper::Resources
  alias_method :resources_without_search, :resources

  def resources(*args, &block)
    resources_without_search *args do
      collection do
        match :search, action: "index"
      end
      yield if block_given?
    end
  end
end
2 голосов
/ 09 марта 2011

Вы можете расширить класс маршрутизации:

class ActionDispatch::Routing
    def extended_resources *args
        resources *args do
            collection do
                post 'common_action'
            end
        end
    end
end

...::Application.routes.draw do
    extended_resources :one
    extended_resources :two
end

В качестве альтернативы, вы можете даже переопределить сам метод resources.

Примечание: я не уверен, что ActionDispatch :: Routingправильное имя класса.

1 голос
/ 09 марта 2011
  %w(one two three four etc).each do |r|
    resources r do
      collection do
        post 'common_action'
      end
    end
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...