使用Ruby on Rails基于两个值返回记录

时间:2013-04-09 23:58:54

标签: ruby-on-rails activerecord

在Ruby on 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 个答案:

答案 0 :(得分: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

上的导轨指南