使用Rails3root_path和root_to与区域设置url路径



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

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->/
    • 博客->/
    • 关于等
  • NL->/NL/posts
    • 博客->/nl/posts。在菜单中,这是与英文相同的条目,只是具有不同的区域设置前缀

我真的不介意EN和EN»博客链接到/EN/posts,如果这简化了事情。

但现在,current_path()在访问根路径时将返回FALSE。它的行为也很奇怪,因为rails会试图将locale设置为?name=value param:/?locale=en

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

编辑:澄清了"博客"项目。

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

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

在Rails国际化(I18n)API 中提到

或者你也可以把根放进这样的范围:

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

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

相关内容

  • 没有找到相关文章

最新更新