2012-10-03 23 views
8

ben raylar uygulamasında aşağıdaki modele sahipRaylar burada fıkra iki yılı tabloları

category => company => store 

Mağaza bir belongs_to şirketi var ve şirket belongs_to kategori ilişkisi vardır. şimdi aynı kategorideki tüm mağazaları almak için bir mağaza nesnesinde nerede bir yöntem kullanmak istiyorum.

Ben iç içe karma destekleyen birileri bu

+0

@simone sayesinde kod vurgulama için !!! – Martin

cevap

17

deneyin deneyebilirsiniz ile birleştiği yerde katıldı masada:

@stores.nearbys(5).joins(:company).where("companies.category_id = xxx") 

DÜZENLEME:

bir mağazanın kategorisini almak için ilk olarak kategori yöntemini şirkete devretmek zorunda kalacak:

class Store < ActiveRecord::Base 
belongs_to :company 

delegate :category, :to => :company 
end 

Şimdi sadece sorguda yöntemini çağırın:

@stores.nearbys(5).joins(:company).where("companies.category_id = ?", self.company.id) 
+0

harika! sadece bir soru daha. xxx'i mağazanın gerçek kategorisiyle nasıl değiştirebilirim? – Martin

+0

Cevabımı düzenledim - umarım daha yararlıdır –

+0

. simone'nin bloguyla birlikte problemimi çözdüm. Avusturya'dan en iyi – Martin

10

where bana bir ipucu verebilir bu

@stores.nearbys(5).where("stores.company.category_id = xxx") 

gibi bir şey istiyorum.

@stores.nearbys(5).where(:company => { :category_id => @category.id }, joins: company) 
+0

hi simone, @ store.nearbys (5) .where (şirket: {category_id}, birleşme: şirket) aşağıdaki hatayı alıyorum - sözdizimi hatası, beklenmedik '}', tASSOC bekleniyor ... .... (şirket: { category_id}, birleşme tarihi: şirket) – Martin

+0

Belki de Ruby 1.9 kullanmıyor musunuz? Eski sözdizimini kullanmaya güncelledim. –

+0

Üzgünüz, bir hata oluştu. "Category_id" in bir değeri olması gerektiğini unutmuştum, bu durumda '@ category.id' (kodu uyarladığınızdan emin olun) –

-1

bu

@category = Category.find xxx 

@store = @category.company.stores 
+0

thats değil gerçekten bir seçenek ... – Martin

+0

biz mağazalarda gibi mümkün eğer başka bir ilişki kurabilen belongs_to: kategori: through =>: şirket –