2012-10-03 15 views
8

ho il seguente modello in applicazione rotaieRails clausola in cui più di due tavoli

category => company => store 

negozio ha una società belongs_to e la società ha un rapporto belongs_to categoria. ora voglio usare un metodo where su un oggetto negozio per recuperare tutti i negozi all'interno della stessa categoria.

Mi piacerebbe avere qualcosa di simile

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

qualcuno può darmi un consiglio su questo

+0

@simone grazie per evidenziare il codice !!! – Martin

risposta

17

Prova unisce con cui sul tavolo unito:

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

EDIT:

Per ottenere la categoria di un negozio che si dovrà prima delegare il metodo di categoria alla sua azienda:

class Store < ActiveRecord::Base 
belongs_to :company 

delegate :category, :to => :company 
end 

Ora basta chiamare il metodo nella query:

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

fantastico! solo un'altra domanda come posso sostituire il xxx con la categoria attuale del negozio, in quanto è anche accessibile tramite la società collegata ?? – Martin

+0

Ho modificato la mia risposta - spero sia più utile –

+0

grazie. risolto il mio problema insieme al blog di simone. tutto il meglio dall'austria – Martin

10

where supporta hash nidificato.

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

hi simone, con @ store.nearbys (5) .where (azienda: {category_id}, join: azienda) ottengo il seguente errore - errore di sintassi, imprevisto '}', in attesa di tASSOC .... dove (azienda: { category_id}, join: company) – Martin

+0

Forse non stai usando Ruby 1.9? Ho aggiornato per usare la vecchia sintassi. –

+0

Siamo spiacenti, si è verificato un errore. Ho dimenticato che 'category_id' deve avere un valore, in questo caso' @ category.id' (assicurati di adattare il codice) –

-1

si può provare questo

@category = Category.find xxx 

@store = @category.company.stores 
+0

questo non è davvero un'opzione, come ho un oggetto negozio esistente e voglio ottenere tutti i negozi che sono nella stessa categoria ... – Martin

+0

possiamo avere un'altra relazione, se possibile come nei negozi appartiene a: categoria,: attraverso =>: azienda –

Problemi correlati