Rails 3 маршруты: сухие участники
-
27-09-2019 - |
Вопрос
Мне нужно добавить следующие методы участника к ряду ресурсов, есть ли способ высушить это?
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
Не связан с StackOverflow