2015-10-28 3 views
0

У меня есть много сквозной ассоциации, которая не работает.имеет много сквозных: не работает

В экипировке есть много продуктов, а продукция имеет множество нарядов. Поэтому im использование имеет много сквозных. Вот моя настройка.

outfit.rb

class Outfit < ActiveRecord::Base 
    belongs_to :user 
    has_many :outfit_products 
    has_many :products, through: :outfit_products 
end 

product.rb

class Product < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :category 
    has_many :outfit_products 
    has_many :outfits, through: :outfit_products 
end 

outfit_product.rb это мой средний стол

class OutfitProduct < ActiveRecord::Base 
    belongs_to :outfit 
    belongs_to :product 
end 

Outfit.products должен вернуть все продукты, связанные с обмундированием , Проблема только в том, что он показывает только 1 продукт. Даже когда у меня есть 2 продукта, связанных с одним и тем же нарядом. См. Ниже. У меня есть 2 объекта OutfitProduct с одинаковым идентификатором Outfit и двумя разными продуктами.

2.1.2 :037 > OutfitProduct.all 
    OutfitProduct Load (0.4ms) SELECT "outfit_products".* FROM "outfit_products" 
=> #<ActiveRecord::Relation [#<OutfitProduct id: 2, product_id: nil, outfit_id: 15, created_at: "2015-10-28 10:36:01", updated_at: "2015-10-28 10:36:01">, #<OutfitProduct id: 3, product_id: 26, outfit_id: 15, created_at: "2015-10-28 10:36:10", updated_at: "2015-10-28 10:36:10">]> 

Когда i outfit.product только 1 продукт показывает? Как я могу показать все продукты?

2.1.2 :038 > Outfit.find(15).products 
    Outfit Load (0.3ms) SELECT "outfits".* FROM "outfits" WHERE "outfits"."id" = ? LIMIT 1 [["id", 15]] 
    Product Load (0.2ms) SELECT "products".* FROM "products" INNER JOIN "outfit_products" ON "products"."id" = "outfit_products"."product_id" WHERE "outfit_products"."outfit_id" = ? [["outfit_id", 15]] 
=> #<ActiveRecord::Associations::CollectionProxy [#<Product id: 26, title: "Lorem ipsum dolor1", price: #<BigDecimal:7fe94297a198,'0.59E2',9(27)>, description: "Lorem ipsum dolor sit amet, consectetur adipiscing...", created_at: "2015-09-22 11:16:37", updated_at: "2015-10-27 11:22:47", user_id: 53, image_file_name: "images.jpeg", image_content_type: "image/jpeg", image_file_size: 11331, image_updated_at: "2015-09-22 11:16:37", category_id: 20>]> 
2.1.2 :039 > 
+1

Возможно, это связано с 'product_id' ** nil ** для одной из этих записей' outfit_products'. – Pavan

+1

@Pavan сладкий Иисус. Правильный ха-ха. Большое спасибо Павану! – joeyk16

+1

Ответ указан в коде, который вы указали. Один из ваших двух объектов OutfitProduct имеет product_id из nil. – Jaxx

ответ

1

Проблема заключается в ее отображении только один продукт. Даже если у меня есть 2 модели связан с тем же нарядом

Причина:

Один из этих outfit_products записей имеют product_idноль за те же outfit_id: 15, поэтому, когда вы делаете Outfit.find(15).products единица с product_idnil не используется.

Смежные вопросы