ruby-on-rails - 在 Rails 中处理多个根路径和范围

标签 ruby-on-rails routing

我们有以下路线设置:

MyApp::Application.routes.draw do
  scope "/:locale" do    
    ...other routes
    root :to => 'home#index'
  end
  root :to => 'application#detect_language'
end

这给了我们这个:
root      /:locale(.:format)    home#index
root      /                     application#detect_language

这很好。

但是,当我们想要生成带有语言环境的路由时,我们遇到了麻烦:
root_path生成 /哪个是正确的。
root_path(:locale => :en)生成 /?locale=en这是不可取的 - 我们想要 /en
那么,问题是,这可能吗,又是如何做到的?

最佳答案

root 方法默认用于定义顶级/路由。
因此,您定义了两次相同的路由,导致第二个定义覆盖第一个!

下面是root方法的定义:

def root(options = {})
  options = { :to => options } if options.is_a?(String)
  match '/', { :as => :root, :via => :get }.merge(options)
end

很明显,它使用 :root 作为命名路由。
如果您想使用 root 方法,只需覆盖所需的参数。
例如。
scope "/:locale" do    
  ...other routes
  root :to => 'home#index', :as => :root_with_locale
end
root :to => 'application#detect_language'

并将其称为:
root_with_locale_path(:locale => :en)

所以,这不是一个错误!

关于ruby-on-rails - 在 Rails 中处理多个根路径和范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11882494/

相关文章:

php - 子目录中的 CodeIgniter 站点,htaccess 文件可能会干扰主目录中的 htaccess 文件?

javascript - 何时使用 node.js vs sinatra vs rails?

ruby-on-rails - 载波 + RSpec 测试

ruby-on-rails - rails 5 : How Can a Form Submit with Custom HTTP Headers?

javascript - Angular 路由 : Instance Creation vs Instance Activation

zend-framework - Zend 路由问题

ruby-on-rails - rails 测试 "ActionController::UnknownFormat: is missing a template for this request format and variant"

php - Laravel 5.2 一组路由中的变量

sql - 使外键也成为 Rails 迁移中的主键

ruby-on-rails - 如何从 Rails 4 中的字符串中删除文件扩展名?