Вопрос

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

 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

РЕДАКТИРОВАТЬ

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

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

Теперь мои маршруты.

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

Это было полезно?

Решение

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

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 :: Маршрутизация :: Mapper.

# routes.rb

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

# Terminal
> rake routes
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top