2

ActiveRecordのバージョン 4.0.0 のfind_eachActiveRecord 関数の代わりとして受け入れられるものはありますか?all

たとえば、以前は次のことがありました。

all_users = User.all

これは、ActiveRelation:all の行に沿った何かが非推奨であることを示す警告を生成します。

代わりに私が思いついたのは:

User.find_each do |user|
  all_users += user
end

これは受け入れられますか、それとも別の方法で行う必要がありますか?

使用の背後にある理由find_eachは、非常に大きなデータセットがある場合にクエリの実行を停止できる「バッチ処理」のためであることを理解しています。この場合、データセットが小さいと仮定しましょう。

編集

次のような条件を使用した場合にのみ、非推奨エラーが発生するようです。

User.all(:conditions => ["name like ?", "%bob%"]) 

生成:

非推奨の警告: Relation#all は非推奨です。リレーションを熱心に読み込みたい場合は、#load を呼び出すことができます (例: Post.where(published: true).load)。リレーションからレコードの配列を取得したい場合は、#to_a を呼び出すことができます (例: Post.wher e(published: true).to_a)。((irb):8 の irb_binding から呼び出されます)

上記の正しい置き換えは次のようになります。

User.where("name like ?", "%bob%")
4

1 に答える 1

4

Model.allRails 4 では非推奨ではありませんが、変更されています。すべてのレコードの配列を返す代わりに、大幅に高速な ActiveRecord Relation を返します。

Model.allModel.scoped以前に遅延ロードされたレコードを非推奨にするように設計されています。Model.allの代わりに、メソッドの連鎖を容易にするために使用できるようになりましscopedた。

この記事ですべてを読むことができます。

于 2013-10-22T22:31:58.297 に答える