我有一个包含这些宝石的应用程序:
导轨 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?谢谢
是的,有一种方法可以防止自动加载翻译。您可以通过在模型中将
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
这将禁用应用程序中所有模型的翻译自动加载。