Рельсы 3 Маршрута: СУХИЕ участники - PullRequest
7 голосов
/ 24 ноября 2010

Мне нужно добавить следующие методы-члены к ряду ресурсов, есть ли способ высушить это?

 member do
    get   :votes
    post  :up_vote
    post  :down_vote
  end

В моих маршрутах.рб

resources :news do
  resources :comments do
     member do
        get   :votes
        post  :up_vote
        post  :down_vote
      end
  end
end

resources :downloads do
  resources :whatever do
     member do
        get   :votes
        post  :up_vote
        post  :down_vote
      end
  end
end

EDIT

Я на самом деле переместил его в модуль примерно так:

module Votable
  module RoutingMethods
    def votable_resources
      member do
        get   "up_votes"
        get   "down_votes"
        post  "up_vote"
        post  "down_vote"
      end
    end
  end # RoutingMethods
end

Теперь мой route.rb выглядит так:

require 'votable'

include Votable::RoutingMethods

MyApp::Application.routes.draw do

  namespace :main, :path => "/" do
    resources :users do 
      resources :comments do
        votable_resources
      end
    end
  end

end

Смотрите мои встроенные комментарии, но я хочу, чтобы именованный маршрут выглядел следующим образом: main_users_comments_up_votes

1 Ответ

7 голосов
/ 24 ноября 2010

Разве вы не можете просто определить метод в ваших файлах маршрутов?

def foo
  member do
   get   :votes
   post  :up_vote
   post  :down_vote
  end
end


resources :news do
 resources :comments do
   foo
 end
end

Редактировать

Я не использовал эту технику раньше. Казалось, это сработало, когда я делал «маршруты рейка». В любом случае, файл маршрутов - это просто код Ruby. Просто будьте осторожны с именем метода, который вы определяете, потому что он определен в экземпляре ActionDispatch :: Routing :: Mapper.

# routes.rb

MyApp::Application.routes.draw do
  puts self
  puts y self.methods.sort
end

# Terminal
> rake routes
...