Ich habe eine Abfrage in Rails, die eine Reihe von Datensätzen basierend auf einer Reihe von OR-Anweisungen erhält.ActiveRecord Auftrag nach Anzahl der übereinstimmenden Bedingungen
@properties = policy_scope(Property).withdrawn_query(@hotlist_preference.withdrawn?)
.or(policy_scope(Property).fallen_through_query(@hotlist_preference.fallen_through?))
.or(policy_scope(Property).time_on_market_query(@hotlist_preference.time_on_market?))
.includes(:listings).paginate(page: params[:page], per_page: 20)
Grundsätzlich gibt es 3 Abfragen Eine einfachere Version könnte wie folgt aussehen:
@properties = Property.where(state = withdrawn).or(where(state = fallen_through)).or(where(age = 4.weeks.ago))
Was ich will ist, um diese Abfrage durch die Anzahl der OR-Bedingungen jedes Ergebnis erfüllt tun. Also sagen, es gab eine Eigenschaft mit zurückgezogenem Status und ihr Alter ist vor 2 Wochen, es würde einen Bestellwert von 2 haben. Wenn es mir möglich wäre, würde ich auch den Bestellwert zu dem zurückgegebenen Hash der Eigenschaften hinzufügen, damit ich ihn verwenden kann es in der Aussicht.
Ich habe gekämpft, um eine saubere Möglichkeit zu finden, dies zu tun, ohne die Ergebnisse durch eine identische Reihe von Abfragen erneut auszuführen.
Welche Datenbank zu erreichen, verwenden Sie? –
Ich weiß nicht, ob dies von ActiveRecord unterstützt wird, aber * könnte * in Erwägung ziehen, auf [raw SQL] (http://StackOverflow.com/a/3289152/1954610) herunterzufallen, um dies zu erreichen? –
Ich benutze PostgreSQL – rmaspero