2012-02-29 6 views
7

は、あなたが、私はシーンの背後に何が起こるか思ったんだけどなRailsのActiveRecordの3方式チェーン、フードの下

Post.where('id > 10').limit(20).order('id asc').except(:order) 

として複数のメソッドチェーンを伴うクエリを作成しましょうか?おそらくチェーンの各部分はSQL SELECTの構築に役立ち、ステートメントが実行され、モデルが作成されるなど、チェーンが完全なものになったら、チェーンの終わりがどこにあるかをどのように知っていますか?各メソッドは、SQLフラグメントを作成するActiveRecord :: Relationを返しますか?

+0

[Rails ActiveRecordチェーンはどのように "where"が複数のクエリを含まない節ですか?](http://stackoverflow.com/questions/10747106/how-does-rails-activerecord-chain-where-clausees-without-複数のクエリ) – Nateowami

答えて

13

あなたは正しいです、これらはそれぞれActiveRecord::Relationを返します。それぞれのメソッド呼び出しは、呼び出されたリレーションを基に構築されます(リレーション上で呼び出されなかったため、最初にビルドするものはありません)。

データを試して操作するまでクエリが実際に実行されないため、to_aと呼ばれる(通常暗黙的に)exec_queriesという名前が付いているため、チェーンの終わりがどこにあるかを知っています。

+0

ああ、それは理にかなっています。 – seand

関連する問題