Я создаю приложение Rails 5, и в этом приложении я позволяю своим пользователям добавлять профиль поиска для квартир, которые они ищут.
Они могут добавить к своему объекту User следующее:
- min_size
- max_size
- min_price
- max_price
- комнаты
Так, например, пользователь может бытьищем квартиру с минимальной (min_size) 100 фут2 и максимальной (max_size) 200 фут2.Они хотят платить только минимум (min_price) 500 долларов в месяц и максимум (max_price) 1200 долларов в месяц, а в квартире должно быть минимум (комнаты) из 3 комнат.
Я получаю информациюо квартирах из удаленной базы данных периодически, и каждый раз я хочу проверять, есть ли какие-либо профили поиска, соответствующие данным квартиры.
Как я могу создать SQL, где запрос проверяет это?
Thisэто то, что я пытаюсь использовать как метод класса для объекта User.
def self.match(size, price, rooms)
User.where("size_min >= ? AND size_max <= ? AND price_min >= ? AND price_max <= ? AND rooms == ?", size, size, price, price, rooms)
end
Запущенный запрос будет
User Load (0.2ms) SELECT "users".* FROM "users" WHERE (size_min >= 100 AND size_max <= 100 AND price_min >= 600 AND price_max <= 600 AND rooms == 3) LIMIT ? [["LIMIT", 11]]
Но это выглядит не совсем хорошо.У меня есть образец объекта User ниже, которому я хочу соответствовать.
<User id: 12, provider: "email", allow_password_change: false, firstname: "John", lastname: "Doe", email: "example@gmail.com", phone: "32323", area: "San Antonio", rooms: 3, size_min: 100, size_max: 200, price_min: 500, price_max: 1200, is_admin: true, created_at: "2019-09-26 15:43:15", updated_at: "2019-09-26 22:06:34">
Информация об объекте для квартиры не диапазоны, а абсолютные данные:
[{"rooms":"3","size":"80","price":"7315"}]