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、ブログのリンクをクリックしようとすると、この URL が表示されますhttp://localhost:3000/blog/posts?locale=en

namespace :blog...とのロケールを削除するにはどうすればよいblog resourceですか?. http://localhost:3000/blog/posts削除したいようなURLを取得したい?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 に答える