3

RailsCast のビデオを見て匿名スコープについて学んでいます。私が自分で試してみると、次のようなステートメントのようです。

scope = User.scoped

すぐに SQL ステートメントを使用して DB にクエリを実行します。

User Load (3.2ms)  SELECT `users`.* FROM `users` 

条件を連鎖させる前に。これは明らかに非常に非効率的であり、ビデオの作成者がそれを行う場合には発生しません。私は何が欠けていますか?

また、スコープは、条件の連鎖が完了し、クエリを実行するときが来たことをどの時点で認識しますか?

4

2 に答える 2

3

コンソールでこれを試していますか?問題は、次のように入力した場合です。

scope = User.scoped

は最後のステートメントのconsole検査を試み、クエリをトリガーします。それを避けるには、最後に何かを返すだけです。

scope = User.scoped; nil

このようにして、変数はconsole検査nilされ、何も起こりません。scopeこれは、実際のコードでは問題になりません。定義した直後に誰もそれを検査しようとしないからです。

于 2013-01-08T16:30:01.537 に答える
1

落胆させたくはありませんが、Rails 4 でこのメソッドscopedが非推奨になろうとしていることは確かです。新しいバージョンのさらに興味深い新機能については、この RailsCastで説明しています。

于 2013-01-08T16:42:36.350 に答える