Rails + 全球化 - 禁用翻译自动加载

问题描述 投票:0回答:1

我有一个包含这些宝石的应用程序:

导轨 5.2.8.1

全球化6.2.1

全球化访问器0.3.0

即使我没有调用访问器/翻译列,似乎翻译总是自动加载。例如:

Model.where(id:123)
Model Load (3.0ms)  SELECT  "model"."id", "model"."column1", "model"."created_at", "model"."updated_at" FROM "model" WHERE "model"."id" = $1 LIMIT $2  [["id", 123], ["LIMIT", 11]]
Model::Translation Load (0.5ms)  SELECT "model_translations".* FROM "model_translations" WHERE "model_translations"."model_id" = $1  [["model_id", 123]]

为什么会自动加载翻译?我如何禁用此功能?我也尝试过:

Model.where(id:123).select(:id)
Model Load (0.7ms)  SELECT  "model"."id" FROM "model" WHERE "model"."id" = $1 LIMIT $2  [["id", 123], ["LIMIT", 11]]
Model::Translation Load (0.4ms)  SELECT "model_translations".* FROM "model_translations" WHERE "model_translations"."model_id" = $1  [["model_id", 123]]

有没有办法阻止在翻译表上调用 SELECT?谢谢

ruby-on-rails ruby rails-activerecord globalize
1个回答
0
投票

是的,有一种方法可以防止自动加载翻译。您可以通过在模型中将

globalize_load_translations
选项设置为
false
来完成此操作。例如:

class Model < ApplicationRecord
  globalize_load_translations false
end

这将阻止您调用

Model.find(123)
时加载翻译。但是,如果您确实需要访问翻译,您仍然可以通过调用模型实例上的翻译方法来实现。例如:

model = Model.find(123)
translations = model.translations

这只会加载实际需要的翻译。

您还可以通过在 Rails 应用程序配置文件中将

config.globalize.load_translations
选项设置为 false 来全局禁用翻译自动加载。例如:

config.globalize.load_translations = false

这将禁用应用程序中所有模型的翻译自动加载。

© www.soinside.com 2019 - 2024. All rights reserved.