2011-01-06 13 views
0

Ich arbeite an einer Fahrgemeinschaftsanwendung, in der Personen nach Aufzügen suchen können. Sie sollten in der Lage sein, die Stadt auszuwählen, aus der sie gerne abgeholt werden möchten, und einen Radius auswählen, der dann die Städte in Reichweite zur Abfrage hinzufügt. Wie auch immer es so weit ist ist, dass ich nur eine Reihe von "AND" Bedingungen zusammen ketten kann, wo es richtig wäre zu sagen "WHERE start_city = city_from OR start_city = a_city_in_range OR start_city = another_city_in_range"Dynamische "ODER" -Bedingungen in Rails 3

Weiß jemand, wie man dies erreichen kann? Vielen Dank im Voraus.

class Search < ActiveRecord::Base 

def find_lifts  
    scope = Lift.where('city_from_id = ?', self.city_from) 
    #returns id of cities which are in range of given radius 
    @cities_in_range_from = City.location_ids_in_range(self.city_from, self.radius_from) 
    #adds where condition based on cities in range 
    for city in @cities_in_range_from 
    scope = scope.where('city_from_id = ?', city) 
    #something like scope.or('city_from_id = ?', city) would be nice..   
    end 
end 
+0

Wont diese Art der Suche sterben auf mehreren parallelen Anfragen, wenn Sie live gehen? Wenn Sie eine lineare Suche nach 10-12 Parametern in jeder Zeile durchführen? Es wird ein Albtraum für den Systemadministrator sein, eine komplexe Datenbank mit Webserver-Topologie zu verwalten. – Siddharth

Antwort

2

Sie können Operator "IN" statt "=" ohne SQL-Syntax Mit Arel (verwendet von Rails 3.0) Sie, dass diese Art und Weise tun können

class Search < ActiveRecord::Base 

    def find_lifts  

    #returns id of cities which are in range of given radius 
    @cities_in_range_from = City.location_ids_in_range(self.city_from, self.radius_from) 
    scope = Lift.where{ :city_from_id => [self.city_from] + @cities_in_range_from }) 

    # ... and so on 
    end 
end 
+0

Funktioniert wie ein Charme. Vielen Dank! –