我的很多用户都会继续http://(rails app URL)/blog
,但我实际上并没有博客。我终于设置了一个Posterous博客,现在想要引导我的用户。有没有办法使用routes.rb配置它?有没有更好的方法不涉及编辑httpd.conf文件?
答案 0 :(得分:64)
我知道这是旧的,所以万一其他人需要这个用于rails 4:
get "/blog" => redirect("http://example.com/blog")
在Rails 4中使用get而不是Match,否则会出现运行时错误
答案 1 :(得分:60)
取决于您使用的Rails版本。
Rails 3
# in routes.rb
match "/blog" => redirect("http://example.com/blog"), :as => :blog
Rails 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
答案 2 :(得分:11)
对于Rails 5:
get '/stories', to: redirect('/articles')
get '/stories', to: redirect('http://google.com')
答案 3 :(得分:0)
将前端路由模拟为常规的Rails控制器路由
背景:最初有Rails整体渲染html视图。然后是前端React应用程序,需要将后端转换为JSON API,并生成指向前端应用程序的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,而无需额外的参数