Domanda

Sono abbastanza nuovo per i binari e il problema in cui mi sto imbattendo è descritto come segue:

Innanzitutto, c'è un tavolo con case. Le case hanno più date associate a Has_Many: date

Secondo c'è il tavolo con date. Le date hanno l'associazione appartenente_to: casa

Ora, in una ricerca, un utente può selezionare un inizio e una data finale. E quello che voglio fare è cercare ogni casa per le sue date e controllare se si tratta tra l'inizio e la data finale. Se una o più date sono entro la data di inizio/fine, è necessario trovare.

Queste sono le mie condizioni per cercare in una casa altri criteri:

parameters.push( [ params[:house_category_id], "houses.house_category_id = ?" ] );
parameters.push( [ params[:province_id], "houses.province_id = ?" ] );

Ho creato un metodo per creare condizioni valide con questi parametri.

Per favore dimmi, se non è abbastanza chiaro, perché è un po 'difficile da spiegare.

Ho provato a cercare questo, ma mi ha portato su tutti i tipi di altre pagine tranne le pagine con una risposta ..

Grazie

È stato utile?

Soluzione

Non sono sicuro di capire correttamente il tuo problema, ma secondo quello che ho capito, puoi ottenere il risultato desiderato usando quanto segue:

res = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date < '2011-01-12' AND dates.date > '2011-01-11'")

dove "2011-01-12" e "2011-01-11" sono le date selezionate dall'utente.

Fammi sapere se questo è quello che stavi cercando o pubblichi con maggiori dettagli.

Altri suggerimenti

Ora un'altra domanda mi viene in mente, ma non so se ciò sia possibile .. Se ti dimentichi di Of-to per questa situazione, esiste qualche possibilità che un tipo posso controllare questo tipo di associazioni come così:

Una casa ha 2 date allegate.

Un utente seleziona 2 date.

Ora voglio selezionare la casa solo se queste 2 date corrispondono entrambe ..

Come questo:

@houses = House.find(:all, :select => 'distinct houses.*', :joins => "INNER JOIN dates ON dates.house_id = houses.id", :conditions => "dates.date = '2011-01-12' AND dates.date = '2011-01-11'")

Ho provato il codice sopra e ho ottenuto un SQL come questo:

SELECT distinct houses.* FROM `houses` INNER JOIN dates ON dates.house_id = houses.id WHERE (dates.date = '2011-01-15' AND dates.date = '2011-01-22')

Ma non sembra funzionare, questo è affatto possibile in una singola query o una singola find ()?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top