Railsコンソールでいくつかの関係をテストしているデータで遊んでいますが、配列の最初のレコードのみを出力しているようです。
プロジェクトのクラスのc
インスタンスであるという変数がありますComparison
。
c.productsを呼び出すことができるように関係を設定すると、その比較ですべての製品の配列(この場合は2)が返されます。
問題は私が電話するときです:
c.products
2つのうち最初の製品のみを返します。
c.products[1]
nilを返します。
y c.products
同じデータのより詳細なバージョンは、両方の製品を示しています。
c.products.count
2を返します。
Railscでは次のようになります。
c.products
=> [#<Product id: 1, category_id: 3, name: "Camera", description: "erererer", brand: "Canon", quantity: 3, star_rating: 4, price: 299.0, created_at: "2014-06-18 20:26:34", updated_at: "2014-06-19 06:40:34">]
c.products.count
(0.5ms) SELECT COUNT(*) FROM "products" INNER JOIN "compared_products" ON "products"."id" = "compared_products"."product_id" WHERE "compared_products"."comparison_id" = $1 [["comparison_id", 2]]
=> 2
y c.productsはそれを凝縮して、多くのデータを返すため、最後の製品までしか表示しません。
y c.products
--- &10 !ruby/object:ActiveRecord::Associations::CollectionProxy
association: !ruby/object:ActiveRecord::Associations::HasManyThroughAssociation
reflection: &1 !ruby/object:ActiveRecord::Reflection::ThroughReflection
macro: :has_many
name: :products
scope:
options:
:through: :compared_products
active_record: &2 !ruby/class 'Comparison'
klass: &3 !ruby/class 'Product'
plural_name: products
collection: true
automatic_inverse_of: false
type:
foreign_type: products_type
constructable: true
source_reflection_name: :product
class_name: Product
chain:
- *1
- !ruby/object:ActiveRecord::Reflection::AssociationReflection
macro: :has_many
name: :compared_products
scope:
options: {}
active_record: *2
klass: !ruby/class 'ComparedProduct'
plural_name: compared_products
collection: true
automatic_inverse_of:
type:
foreign_type: compared_products_type
constructable: true
class_name: ComparedProduct
foreign_key: comparison_id
active_record_primary_key: id
scope_chain:
- []
- []
owner: !ruby/object:Comparison
attributes:
id: 2
user_id: 1
name: Jacks Electronics Comparison
created_at: 2014-06-20 16:12:36.828154000 Z
updated_at: 2014-06-20 16:12:36.828154000 Z
loaded: true
target:
- !ruby/object:Product
attributes:
id: 1
category_id: 3
name: Camera
description: erererer
brand: Canon
quantity: 3
star_rating: 4
price: 299.0
created_at: 2014-06-18 20:26:34.276570000 Z
updated_at: 2014-06-19 06:40:34.776216000 Z
ご覧のとおりc.products
、SQLクエリはトリガーされませんでした。つまり、キャッシュされています。c.products.count
一方、クエリをトリガーし、データベースから実際の情報を通知します。したがって、c.products
他の関連付けを介して、またはデータベースで直接手動で変更された可能性があります。実際の製品を受け取るにはc.products.reload
、(SQLトリガーなしで)キャッシュされた製品をカウントします。c.products.size
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加