0

param ロケールを渡すリクエストを作成しようとすると、i18n がデフォルトのロケールを変更しません

アプリケーションコントローラー

before_filter :set_locale
respond_to :json

def set_locale
  I18n.locale = params[:locale] || I18n.default_locale
end

私のモデル

class FoodType < ActiveRecord::Base

  default_scope where(locale: I18n.locale)

FoodTypesコントローラー

def index   
  render json: FoodType.all
end

ただし、コンソールでは、クエリは変更されません。以前のリクエストから引き続きロケールを渡します

passing locale = pt-BR 

FoodType Load (0.4ms)  SELECT "food_types".* FROM "food_types" WHERE "food_types"."locale" = 'en'
4

1 に答える 1

3

FoodType クラスが読み込まれると、スコープが評価されます。これは、常に同じ (初期) 値を持つことを意味します。外部変数によって異なるこのようなスコープには、ラムダを使用する必要があります (時間は別の例です)。

default_scope, lambda { where(locale: I18n.locale) }
于 2013-04-19T18:50:48.060 に答える