Я создаю страницу поиска, которая будет возвращать результаты двух моделей AHotel
и BHotel
.Я хотел бы запросить обе таблицы по одному и тому же параметру, т. Е. Я хотел бы, чтобы все AHotels
и все BHotels
имели атрибут города, например "Нью-Йорк".
Моя страница поиска всегда должна показывать AHotels
до BHotels
.Я хотел бы, чтобы массив возвращался с All AHotels
в nyc, за которым следует BHotels
в nyc.
AHotel.where("city ILIKE ?", "%#{city}%").or(BHotel.where("city ILIKE ?", "%#{city}%"))
AHotel.includes(:bhotel).where("ahotels.city ILIKE :search OR bhotels.city ILIKE :search", search: "new york").references(:bhotels)
Когда я бегу Hotel.where("city ILIKE ?", "New York").count
, я получаю 37.
И когда я бегу BHotel.where("city ILIKE ?", "New York").count
, яполучить 600.
Но когда я запускаю любой из первых двух запросов, я получаю только счет 37. Кажется, он только возвращает AHotels
.
Как сделать запрос из обеих таблиц по городам?Я не хочу запускать два отдельных запроса, так как собираюсь разбить результаты на страницы.
Пример AHotel Records
{"id" => 1, "name"=>"Hyatt Place", "address"=>"Cox Rd", "state"=>"VA", "city"=>"nyc", "country"=>"US"}
{"id" => 2, "name"=>"Hyatt Place", "address"=>"Cox Rd", "state"=>"VA", "city"=>"la", "country"=>"US"}
Пример BHotel Records
{"id" => 1, "prop_name"=>"Marriott", "address"=>"Cox Rd", "state"=>"VA", "city"=>"nyc", "country"=>"US"}
{"id" => 2, "prop_name"=>"Hilton", "address"=>"Cox Rd", "state"=>"VA", "city"=>"denver", "country"=>"US"}
То, что я хотел бы вернуть
Массив с AHotel с ID = 1 и BHotel с ID = 2, так как они оба имеют своигород установлен на Нью-Йорк.
[{"id" => 1, "name"=>"Hyatt Place", "address"=>"Cox Rd", "state"=>"VA", "city"=>"nyc", "country"=>"US"}, {"id" => 1, "prop_name"=>"Marriott", "address"=>"Cox Rd", "state"=>"VA", "city"=>"nyc", "country"=>"US"}]