Создание маршрута рельсов на внешний URL - PullRequest
46 голосов
/ 02 сентября 2010

Многие мои пользователи продолжают посещать http://(rails app URL)/blog, но у меня нет блога.Я наконец-то установил блог Posterous и теперь хочу направить туда своих пользователей.Есть ли способ настроить это с помощью rout.rb?Есть ли лучший способ, который не требует редактирования файла httpd.conf?

Ответы [ 4 ]

64 голосов
/ 24 октября 2013

Я знаю, что это старо, так что если кому-то еще это нужно для рельсов 4:

get "/blog" => redirect("http://example.com/blog")

Используйте get вместо Match в Rails 4, в противном случае вы получите ошибку времени выполнения

60 голосов
/ 02 сентября 2010

Зависит от используемой вами версии Rails.

Рельсы 3

# in routes.rb
match "/blog" => redirect("http://example.com/blog"), :as => :blog

Рельсы 2

# in routes.rb
map.blog '/blog',
  :controller => "a_helper_controller",
  :action => "redirect_to_blog"

# in a_helper_controller.rb
def redirect_to_blog
  redirect_to "http://example.com/blog"
end
13 голосов
/ 28 марта 2018

для рельсов 5:

get '/stories', to: redirect('/articles')
get '/stories', to: redirect('http://google.com')

Страница источника Rails Guide

0 голосов
/ 28 января 2019

Эмулировать внешние интерфейсы как обычные маршруты контроллеров Rails

Фон: в начале был рельс монолитного рендеринга html-представления. Затем появилось приложение React для внешнего интерфейса и необходимость конвертировать бэкэнд в API JSON и генерировать URL-адреса (в основном в электронных письмах), указывающие на приложение внешнего интерфейса, которое ведет себя почти точно так же, как контроллер Rails.

Я искал способ подражать способу rails для создания URL-адреса, но вместо этого указывал на внешний URL-адрес и генерировал соответствующие path_helpers, которые можно было бы легко использовать с моим приложением, RSpec, cucumber / Capybara и всем остальным. Я нашел этот хак вокруг маршрутов для эмуляции маршрутов внешнего интерфейса, который также требует передачи дополнительного параметра для полного устранения неоднозначности внутренних маршрутов внешнего интерфейса VS (полезно при тестировании капибары)

frontend_scope = {
  as: :frontend,
  host: Rails.configuration.frontend_host, # like https://www.example.com
  port: Rails.configuration.frontend_port, # 443
  constraints: (lambda { |request| request.params[:app] == :frontend })
}
scope(frontend_scope) do
  root to: 'static_pages_controller#home'
  resources :articles, only: [:show, :index]
end

Тогда в моем коде Ruby я могу использовать

frontend_article_url(@article, app: :frontend)
frontend_articles_url(app: :frontend)
... (and everything that can be generated in a classic rails app)

Неудобно, что в вашем перенаправлении будет параметр app, который вы должны будете игнорировать в своем веб-приложении + все другие веб-приложения, такие как Google Analytics, поисковая система и т. Д. *.

* проблема в том, что если у вас есть и /articles на вашем внешнем интерфейсе, и /articles на вашем бэкэнде, ваше приложение не сможет изменить ситуацию с обоими маршрутами, которые разрешают один и тот же URL без помощи дополнительного параметра

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...