3

我的routes.rb

MyApp::Application.routes.draw do
 scope '(:locale)' do
  #all resources here
 end
 namespace :blog do
  resources :posts, :only => [:index, :show]
 end
end

我的application_controller.rb

class ApplicationController < ActionController::Base
 #
 #
 before_filter :set_locale

 private

 def default_url_options(options = {})
   {locale: I18n.locale}
 end

 def set_locale
   #code for detect locale here
 end
 #
 #
end

里面的所有资源scope '(:locale)'都运行良好。

但是我不想使用语言环境,namespace :blog当我尝试点击博客链接时,我可以看到这个 urlhttp://localhost:3000/blog/posts?locale=en

如何删除namespace :blog...和的语言环境blog resource?我想得到一个像http://localhost:3000/blog/posts我想删除的网址?locale=en

谢谢!

4

2 回答 2

1

skip_before_filter在您的博客控制器中使用?

于 2013-04-02T15:15:05.960 回答
0

鉴于您在评论中所说的话,如果当前控制器不是,请尝试仅locale在您的中包含,这有望消除尾随问题。也许是这样的:default_url_optionsPostsController
?locale=en

 def default_url_options(options = {})
   { locale: I18n.locale } unless controller_name == 'posts'
 end

或者,既然default_url_options是 depreciated,如果你想使用url_options,也许是这样的:

def url_options
  controller_name == 'posts' ? super : { locale: I18n.locale }.merge(super)
end

以上都没有经过测试,所以我不确定它们中的任何一个都可以工作。

编辑

如果您在此 StackOverflow Q&Alocale中将 设置为nillike怎么样?所以也许是这样的:

def url_options
  locale = controller_name == 'posts' ? nil : I18n.locale
  { locale: locale }.merge(super)
end
于 2013-04-10T15:09:36.507 回答