当我试图通过param语言环境发出请求时,i18n没有更改默认语言环境
的ApplicationController
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)
FoodTypesController
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'
答案 0 :(得分:3)
加载FoodType类时,将评估您的范围。这意味着它将始终具有相同(初始)值。你需要对这样的范围使用lambda,这取决于一些外部变量(时间是另一个例子):
default_scope, lambda { where(locale: I18n.locale) }