В Rails Routes перенаправить действие контроллера в root? - PullRequest
3 голосов
/ 29 июня 2010

В моем файле маршрутов есть корневой путь:

root 'games#index'

Проблема в том, что если кто-то перейдет на: http://domain.com/games, он не показывает корень, поэтому мы создаем два URL для одной и той же страницы.

Есть ли способ изменить любой удар на http://domain.com/games на http://domain.com?

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

Спасибо!

Ответы [ 4 ]

3 голосов
/ 24 марта 2011

У меня была такая же проблема с сессиями.Я хотел предоставить / session для входа в систему и выхода из системы, но поскольку неверный пароль оставляет вас в / session, я хотел изящный способ справиться с тем, чтобы пользователь повторно отправлял этот URL-адрес в виде GET (например, набирая Ctrl-L,).Это работает для меня на Rails 3:

resources :sessions, :only => [:new, :create, :destroy]
match '/sessions' => redirect('/login')
match '/login', :to => 'sessions#new'

Я думаю, ваш код будет выглядеть примерно так:

resources :games, :only => [:new, :edit, :create, :destroy]
match '/games' => redirect('/')
3 голосов
/ 29 июня 2010

Самый простой способ - просто установить перенаправление.

map.redirect('/games','/')

Хотя ваша проблема в том, что маршрут /games не должен присутствовать в первомplace.

Удалите универсальный маршрут внизу вашего routes.rb файла, и это даже не будет проблемой.

0 голосов
/ 14 октября 2016

routes.rb:

  root 'games#index'

В контроллере:

  def index
    redirect_to root_path if request.env['PATH_INFO'] === '/games'
    @games = Game.all
  end
0 голосов
/ 19 ноября 2012

Начиная с текущей версии Rails (3.2.9), я достиг того же результата:

MyApp::Application.routes.draw do
  # ...
  # declare the redirect first so it isn't caught by the default
  # resource routing
  match '/games' => redirect('/')
  # ...
  resources :games
  # ...
  root :to => 'games#index'
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...