2
@category = Category.where(:category_name => 'cricket')
@category.class

ここで @category のクラスは「ActiveRecord::Relation」ですが、

@category = Category.all(:conditions => { :category_name => 'cricket' })
@category.class

この場合、@category のクラスは「Array」です。

両方のクエリの結果は同じですが、クラスも異なります。 なぜ?

もう 1 つ... 前者の場合は @category.title や @category.body などを実行できますが、後者の場合はできません。 なぜ?

4

1 に答える 1

2

最初のケースでは、実際にはデフォルトのスコープを使用しており、それをwhereパーツに関連付けています。つまり、この Relation のアイテムを使用する場合、必要に応じて SQL クエリが実行されます。準備はできているが、まだ実行されていないクエリのように考えてください。これにより、必要に応じて値が生成されます。さらにパラメーターを指定できます。たとえば、別の where 句などを追加できます。もちろん、単純な配列よりもスマートです。これは、実装がより複雑であるためです。

2 番目のケースでは、データベースからすべてのレコードをすぐにフェッチするため、結果は結果を含む配列になります。他と比べるとかなりダサい。

于 2012-05-17T09:17:52.247 に答える