2014-10-23 9 views
11

sorgulamak ve projeler birçok adımları var.yiğitlik ilişkili modelin nitelik <strong>koleksiyonları</strong> birçok <strong>projeyi</strong> var benim raylar uygulamasında

Bir koleksiyonun projelerindeki adımların tüm kimliklerini yakalamayı ve hepsini bir sorguda yapıp yapamayacağımı merak ediyorum.

Örneğin, ben şu

step_ids = [] 
@collection.projects.each do |project| 
    project.steps.each do |step| 
     step_ids << step.id 
    end 
end 

yapabilirsiniz Ama aşağıdaki gibi bir şey yapmak mümkün olduğunu biliyoruz: burada

@collection.projects.include(:steps).pluck("step.id") // sözdizimi doğru değil

cevap

20

bu deneyin :

Step.joins(:project).where(projects: { collection_id: @collection.id }).pluck(:'steps.id') 

KullanımBirleşimler içinve sonra nerede yan tümce için projects. İlk belongs_to ilişkisine karşılık gelir ve ikincisi db tablosunun adıdır.

düzenleme: Bir project_collection (ve sonra has_many :collections, through :project_collection) Ne yazık ki

Step.joins(:project => :project_collection) 
    .where(project_collections: { collection_id: @collection.id }) 
    .pluck(:'steps.id') 
+0

Yardımlarınız için teşekkürler. projeler aslında birden çok koleksiyona ait olabilir, dolayısıyla projeler için collection_id özelliği yoktur. önerinizi değiştirmek için herhangi bir fikir? – scientiffic

+0

o zaman "projects_collections" tablosu var mı? Birleştirmek için birleştirmeyi genişletebilirsiniz .... Cevabımı bir örnekle düzenleyeceğim. – John

+0

Örneğiniz için teşekkürler - benim için çalıştı! – scientiffic

1

belongs_to proje ve koleksiyonları ve bir proje varsayarak arasında bir çok-çok ilişkisi söz konusu olduğunda, ben sanmıyorum biz tek bir sorguda AR aracılığıyla yapabilirdi. Veritabanına iki sorguda almak için aşağıdaki iç içe bir sorguyu yapabilirsiniz:

İlgili konular