使用Rails 3 root_path和root_to与locale url-paths

时间:2011-05-30 19:36:40

标签: ruby-on-rails-3 routing

我有一个简单的路线和一个简单的主菜单:

的routes.rb

scope "(:locale)", :locale => /en|nl/ do
  resources :posts, :only => [:show, :index]
end
root :to => "posts#index"

菜单

%ul#nav-language
  %li.alpha
    = menu_link_to(t('app.english'), root_path) 
  %li.omega
    = menu_link_to(t('app.nederlands'), "/nl/posts")
%ul#nav-section
  %li
    = menu_link_to(t('app.blog'), {:controller => "posts", :action => "index")
  -#more %li's.

menu_link_tolink_to的简单包装器,在选择当前菜单时添加了设置“活动”类:

  def menu_link_to(title, options = {}, html_options = {})
    if current_page?(options)
      html_options[:class] ||= []
      html_options[:class] << "active"
    end

    link_to(title, options, html_options)
  end

如您所见,我有两个指向根的菜单项。以更直观的方式,我的菜单看起来像:

  • EN - &gt; /
    • 博客 - &gt; /
    • 关于等等。
  • NL - &gt; / NL /职位
    • 博客 - &gt; / NL /职位。在菜单中,这与英语相同,只有不同的区域设置前缀。

我真的不介意EN和EN»Blog链接到/ en / posts,如果这样可以简化内容。

但是现在,current_path()在访问根路径时将返回FALSE。它也表现得很奇怪,因为rails会尝试将语言环境设置为?name = value param:/?locale=en

我想我错过了一些关键的root_path或路由。有什么想法吗?

编辑:澄清了“博客”项目。

1 个答案:

答案 0 :(得分:2)

您是否尝试在routes.rb文件中添加匹配?就在root之前:

match '/:locale' => 'dashboard#index'

Rails Internationalization (I18n) API

中提及

或者您也可以将root也放入这样的范围:

scope "(:locale)", :locale => /en|nl/ do
  resources :posts, :only => [:show, :index]
  root :to => "posts#index"
end

然后,如果您未指定区域设置,则将使用默认区域设置。