Динамические условия «ИЛИ» в Rails 3 - PullRequest
0 голосов
/ 06 января 2011

Я работаю над приложением для автобуса, где люди могут искать лифты. Они должны иметь возможность выбрать город, из которого они хотели бы быть поднятыми, и выбрать радиус, который затем добавит города в радиусе действия запроса. Тем не менее, до сих пор это так, что я могу связать только кучу "AND" условий вместе, где было бы правильно сказать "WHERE start_city = city_from OR start_city = a_city_in_range OR start_city = another_city_in_range"

Кто-нибудь знает, как этого добиться? Заранее большое спасибо.

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

1 Ответ

2 голосов
/ 06 января 2011

Вы можете использовать оператор «IN» вместо «=» без использования синтаксиса SQL. С Arel (используется Rails 3.0) вы можете сделать это следующим образом

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...