1

アクティブなレコードに少し混乱しています。停止するといつでもクエリが起動されるようです。

@model.where( :store_id => @sid )

これは問題ありませんが、次のようなクエリを作成したい場合はどうすればよいでしょうか:

query = @model.where( :store_id => @sid )

if(some_condition)
  query.offset(50)

次に、クエリを実行します(実際に行っていることではなく、非常に単純な例です)。クエリを段階的にまとめて実行するように指示する方法はありますか?

4

2 に答える 2

3

実際、ActiveRecord はまさにあなたが望むことを行います。遅延読み込みと呼ばれます。.inspect行の結果をバックグラウンドで呼び出す Rails コンソールに混乱しているかもしれません。

この質問をチェックしてください: Rails 3.2.6 での遅延読み込み

于 2013-09-20T23:33:09.167 に答える
2

これはすでにあなたが望むように機能します。

where()のインスタンスを返しますActiveRecord::Relation

リレーションは、必要になるまでデータベース呼び出しを実行しません。そうでない場合に発生する可能性がある理由は、コンソールでテストしているためです。これにより、各ステートメントの出力が出力されます (したがって、リレーションが読み込まれます)。loaded()メソッドを介してリレーションがロードされているかどうかをテストできます。

コンソールでこれを試してください:

m = @model.where(:store_id => @sid); # the semicolon will silence the output

m.loaded?  # nil
m          # executes db call, will print out the contents of the relation
m.loaded?  # true
于 2013-09-20T23:33:00.530 に答える