2012-10-03 8 views
8

Ich habe folgendes Modell in Rails-AnwendungRails, wo Klausel über zwei Tabellen

category => company => store 

Shop hat eine belongs_to Unternehmen und Unternehmen hat eine belongs_to Kategorie Beziehung. Jetzt möchte ich eine Where-Methode für ein Speicherobjekt verwenden, um alle Speicher innerhalb derselben Kategorie abzurufen.

Ich möchte etwas haben, wie diese

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

kann mir jemand auf dieser Hash

+0

@simone Dank für den Code markieren !!! – Martin

Antwort

17

Versuchen verbindet sich mit dem auf der verknüpften Tabelle:

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

EDIT:

Um die Kategorie eines Speicher erhalten Sie muss zuerst die Kategorie Methode an seine Firma delegieren:

class Store < ActiveRecord::Base 
belongs_to :company 

delegate :category, :to => :company 
end 

Nun rufen Sie einfach die Methode in Ihrer Suchanfrage:

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

großartig! Nur noch eine Frage. wie kann ich das xxx durch die tatsächliche kategorie des ladens ersetzen, da es auch nur über das verbundene unternehmen erreichbar ist? – Martin

+0

Ich habe meine Antwort bearbeitet - hoffe, es ist hilfreicher –

+0

danke. löste mein Problem zusammen mit Simones Blog. alles gute aus österreich – Martin

10

where unterstützt verschachtelte einen Tipp geben.

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

hi simone, mit @ store.nearbys (5) .wo (Firma: {category_id}, Joins: Firma) Ich bekomme den folgenden Fehler - Syntaxfehler, unerwartete '}', erwartet TASSOC .... wo (Firma: { category_id}, joins: company) – Martin

+0

Vielleicht verwenden Sie nicht Ruby 1.9? Ich habe aktualisiert, um die alte Syntax zu verwenden. –

+0

Entschuldigung, es gab einen Fehler. Ich habe vergessen, dass 'category_id' einen Wert haben muss, in diesem Fall' @ category.id' (passen Sie den Code an) –

-1

können Sie versuchen, diese

@category = Category.find xxx 

@store = @category.company.stores 
+0

das ist nicht wirklich eine Option, da ich ein vorhandenes Geschäft Objekt habe und ich alle Geschäfte, die in der gleichen Kategorie sind wollen ... – Martin

+0

können wir eine andere Beziehung haben, wenn möglich wie in den Läden gehört zu: Kategorie,: durch =>: Firma –