我有一条简单的路线和一个简单的主菜单:
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->/
- 博客->/
- 关于等
- 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
然后,如果不指定区域设置,将使用默认区域设置。