0

当我尝试通过参数语言环境发出请求时,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)

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'
4

1 回答 1

3

在加载 FoodType 类时评估您的范围。这意味着它将始终具有相同的(初始)值。您需要对这样的范围使用 lambda,这些范围因某些外部变量而异(时间是另一个示例):

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