Frage

Ich bin ziemlich neu in Rails und das Problem, auf das ich stöße, wird wie folgt beschrieben:

Erstens gibt es einen Tisch mit Häusern. Die Häuser haben mehrere Daten, die mit Has_Many: Daten verbunden sind

Zweitens gibt es die Tabelle mit Daten. Daten haben die Vereinigung gehört: Haus: Haus

In einer Suche kann ein Benutzer nun einen Start- und Enddatum auswählen. Und was ich tun möchte, ist, jedes Haus nach den Daten zu durchsuchen und zu überprüfen, ob diese zwischen Start und Enddatum liegen. Wenn ein oder mehrere der Daten innerhalb des Start-/Enddatums liegen, muss es gefunden werden.

Dies sind meine Bedingungen, um ein Haus nach anderen Kriterien zu durchsuchen:

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

Ich habe eine Methode erstellt, um mit diesen Parametern gültige Bedingungen zu erstellen.

Bitte sagen Sie mir, wenn es nicht klar genug ist, weil es etwas schwer zu erklären ist.

Ich habe versucht, danach zu suchen, aber es hat mich auf alle Arten von anderen Seiten außer den Seiten mit einer Antwort gebracht.

Vielen Dank

War es hilfreich?

Lösung

Ich bin mir nicht sicher, ob ich Ihr Problem richtig verstehe, aber nach dem, was ich verstanden habe, können Sie das gewünschte Ergebnis mit Folgendem erzielen:

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'")

wobei "2011-01-12" & "2011-01-11" die vom Benutzer ausgewählten Daten sind.

Lassen Sie mich wissen, ob Sie dies gesucht haben oder mit weiteren Details veröffentlichen.

Andere Tipps

Jetzt trifft mir eine andere Frage, aber ich weiß nicht, ob das möglich ist. Wenn Sie die von zu zu dieser Situation vergessen, gibt es eine Möglichkeit, dass ich diese Art von Assoziationen wie SO überprüfen kann:

Ein Haus hat 2 Daten angeschlossen.

Ein Benutzer wählt 2 Daten aus.

Jetzt möchte ich nur das Haus auswählen, wenn diese 2 Daten beide entsprechen.

So was:

@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'")

Ich habe den obigen Code ausprobiert und einen SQL wie folgt bekommen:

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')

Aber es scheint nicht zu funktionieren, ist das überhaupt in einer einzelnen Abfrage oder einem einzelnen Find () möglich?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top