この ruby/rails 構造は、いつも私を困惑させます:
User.where(:name => "Thiago").limit(3).using(:slave_one)
これは左から右に実行する必要があるため、連続する呼び出しごとにレシーバーが設定されます。whereのインスタンスを返すUser クラスから始めますActiveRecord::Relation。次にlimit、そのインスタンスで が呼び出され、 の別のインスタンスが返されますActiveRecord::Relation。次にusing、そのインスタンスで呼び出されます (たまたまシャードが選択されます)。全体がオブジェクト内に SQL クエリを構築しているActiveRecord::Relationと思います。私の質問は、「何がクエリの実際の実行をトリガーするのか」ということです。クエリをさらに変更する後続処理がチェーン内に存在する可能性があるため、チェーン内の特定の時点で実行することはできません。そのあともusing追加のメソッドがチェーンに追加されているかどうかがわからないため、クエリはまだ実行できません。明らかに、構築後にクエリを実行しますが、クエリは実際にどのように呼び出されるのでしょうか?
ありがとう...チェーン内のメソッドの名前には「セマンティクス」があることがわかりました。作成中のクエリをさらに変更する人もいます。最後の 1 つだけが、データのフェッチが必要なタイプである可能性があります。