我有一个简单的路线和一个简单的主菜单:
的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_to
是link_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和EN»Blog链接到/ en / posts,如果这样可以简化内容。
但是现在,current_path()在访问根路径时将返回FALSE。它也表现得很奇怪,因为rails会尝试将语言环境设置为?name = value param:/?locale=en
。
我想我错过了一些关键的root_path或路由。有什么想法吗?
编辑:澄清了“博客”项目。
答案 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
然后,如果您未指定区域设置,则将使用默认区域设置。