2015-03-06 5 views
0

Я хочу, чтобы иметь возможность группировать подобные действия под одним контроллером, чтобы держать вещи аккуратными и чистыми.Лучший способ группировки подобных действий с использованием Rails Routing?

Например, если у меня есть Game модель, и я в настоящее время:

resources :games do 
    get 'schedule/previous', to: "Games#previous" 
    get 'schedule/upcoming', to: "Games#upcoming" 
    get 'schedule/calendar', to: "Games#calendar" 
end 

Это, очевидно, получить больше и больше unweildy, особенно потому, что у меня есть куча других действий в моем GamesController. Как я могу переместить их на новый контроллер (или иначе организовать их более чисто)?

Если возможно, я бы поставил новый контроллер «Schedule» под номером app/controllers/games/schedule_controller.rb или что-то в этом роде.

Я попытался сделать это с использованием пространств имен, областей и ресурсов (и большинство комбинаций из двух из них) и не мог понять это.

ответ

1

Для достижения этой цели, как вы хотите

Сначала изменить маршруты

routes.rb

resources :games do 
    get 'schedule/previous', to: "games/schedule#previous" 
    get 'schedule/upcoming', to: "games/schedule#upcoming" 
    get 'schedule/calendar', to: "games/schedule#calendar" 
end 

приложение/контроллеры/игры/schedule_controller.rb

class Games::ScheduleController < ApplicationController 
    #Metods here 
    def previous 
    end 

end 

Другой оптический n, если вы используете рельсы 4, это использовать проблемы. Ее не нужно не изменять routes.rb

приложение/контроллеры/проблемы/schedule.rb

module Schedule 
    extend ActiveSupport::Concern 
    #Metods here 
    def previous 
    end 
end 

приложение/контроллеры/games_controller.rb

class GamesController < ApplicationController 
    include Schedule 
end