Rails, trovando oggetto con più date nell'associazione Has_Many
-
10-10-2019 - |
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
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 ()?