Rails + globalize - 翻訳の自動読み込みを無効にする
概要
これらの宝石を含むアプリがあります:
レール 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) を呼び出したときに翻訳がロードされなくなります。ただし、翻訳にアクセスする必要がある場合は、モデル インスタンスで translations メソッドを呼び出すことでアクセスできます。例えば:
model = Model.find(123)
translations = model.translations
これにより、実際に必要な場合にのみ翻訳がロードされます。
Rails アプリケーション構成ファイルで config.globalize.load_translations オプションを false に設定することで、翻訳の自動ロードをグローバルに無効にすることもできます。例えば:
config.globalize.load_translations = false
これにより、アプリケーション内のすべてのモデルの翻訳の自動ロードが無効になります。