2013-04-09 2 views
0

В Ruby On Rails, учитывая массив значений, можно выбрать все записи с атрибутом со значением в этом массиве:Возврат записи на основе двух значений с Рубином на Rails

trip_array = [31, 37, 40] 
@flights = Flight.where(trip_id: trip_array) 

Это дает мне список всех рейсов, где trip_id равен 31, 37 или 40.

Однако мне нужно выбрать по паре значений. Я надеялся, что сделать что-то вроде этого:

trip_sections_array = [[31, 1], [37, 2], [40, 1]] 
@flights = Flight.where([:trip_id, :trip_section] => trip_section_array) 

Так что я фактически хочу, чтобы вернуть все рейсы, где это (trip_id = 31 and trip_section = 1) or (trip_id = 37 and trip_section = 2) or (trip_id = 40 and trip_section = 1), но и для любого произвольного двумерного массива.

Как это сделать?

ответ

1

Для этого вам придется прибегать к использованию строковых условий SQL. Что-то вроде:

trip_conditions = trip_sections_array.map { "(trip_id = ? AND trip_section = ?)" }.join(" OR ") 
Flight.where(trip_conditions, *trip_sections_array.flatten) 

Для получения дополнительной информации см направляющих рельсов на pure string conditions

+0

Вот что я боялся, что я должен делать. Несмотря на это, он работает с вашим решением, поэтому спасибо. – bogardpd