0

Rails 3.2アプリでは、customerテーブルからすべてのcustomerレコードを取得して変数に割り当て、後で変数customersに対してクエリ(.where(:active => trueなど)を実行する必要customersがあります。ここには2つの質問があります。

  1. すべてのレコードを取得するためのより良い方法は何ですか?

    Customer.all動作します。ただし、Railsのドキュメントによると、Customerテーブルが大きくなるとパフォーマンスの問題が発生する可能性があります。試してみCustomer.find_eachましたが、エラーが発生しまし"no block given (yield)"た。

  2. 変数customersquery_ableを作成するにはどうすればよいですか?

    変数customers(のようなcustomers.where(:active => true))に対してクエリを実行すると、エラーが発生します。クエリを実行できるように、undefined method. It seems that the顧客のis an array object and can't take場合はどこの顧客ですか?. How can we retrieve

手伝ってくれてありがとう。

4

1 に答える 1

2

Rails <4.allでは、データベースをすぐに呼び出し、レコードをロードして配列を返します。代わりに、連鎖可能なオブジェクトを返す「lazy」スコープのメソッドを使用してください。ActiveRecord::Relation例えば:

customers = Customer.scoped
...
customers = customers.where(:active => true)
customers = customers.where(...)
etc...

そして、レコードをロードしてそれらを反復処理する必要があるときに、find_eachを呼び出すことができます。

customers.find_each do |customer|
  ...
end
于 2013-02-23T16:18:59.120 に答える