Sql запрос диапазона игнорирует меньшее значение - PullRequest
0 голосов
/ 28 мая 2020

У меня есть запрос sql, который выглядит следующим образом:

listings = school.listings.where(prop_type: prop_type).where(status: status).where('beds >= ?', self.beds).where("price <= ? AND price >= ?", self.max_price, self.min_price)

В моей среде разработки все отлично работает с этим выводом журнала:

SELECT COUNT(*)
FROM "listings"
INNER JOIN "assignments"
ON "listings"."id" = "assignments"."listing_id"
WHERE "assignments"."school_id" = ?
AND "listings"."prop_type" IN (?, ?, ?, ?)
AND "listings"."status" IN (?, ?, ?, ?, ?, ?, ?)
AND (beds >= 3)
AND (price <= 750000 AND price >= 500000)
[["school_id", 602], ["prop_type", "AT"], ["prop_type", "DE"], 
 ["prop_type", "MH"], ["prop_type", "MU"], ["status", "ACTV"],
 ["status", "AUCT"], ["status", "BOMK"], ["status", "NEW"], 
 ["status", "PCHG"], ["status", "PCKT"], ["status", "RACT"]]

но в моей постановке в среде, размещенной на Heroku, вывод журнала выглядит так:

SELECT COUNT(*)
FROM "listings"
INNER JOIN "assignments"
ON "listings"."id" = "assignments"."listing_id"
WHERE "assignments"."school_id" = $1
AND "listings"."prop_type" IN ($2, $3, $4, $5)
AND "listings"."status" IN ($6, $7, $8, $9, $10, $11, $12)
AND (beds >= 3)
AND (price <= 750000)
[["school_id", 602], ["prop_type", "AT"], ["prop_type", "DE"],
 ["prop_type", "MH"], ["prop_type", "MU"], ["status", "ACTV"], 
 ["status", "AUCT"], ["status", "BOMK"], ["status", "NEW"], 
 ["status", "PCHG"], ["status", "PCKT"], ["status", "RACT"]]

Нижний диапазон цены полностью игнорируется.

Я переписал ценовую часть запроса во многих способами:

.where('price >= ?',self.min_price).where('price <= ?',self.max_price)
.where("price between #{self.min_price} and #{self.max_price}")
.where(price: (self.min_price)..(self.max_price))
.where('price <@ ?', self.min_price..self.max_price)

Я также пробовал написать запрос в sql:

listings = school.listings.find_by_sql("
                SELECT * FROM listings
                INNER JOIN assignments ON listings.id = assignments.listing_id
                WHERE assignments.school_id = #{school.id}
                AND listings.prop_type IN ('AT', 'DE', 'MH', 'MU')
                AND listings.status IN ('ACTV', 'AUCT', 'BOMK', 'NEW', 'PCHG', 'PCKT', 'RACT')
                AND (beds >= 3)
                AND (price between #{self.min_price} and #{self.max_price})
                ORDER BY listings.created_at desc
              ")

Я проверил, что атрибут min_price сохранен в объекте поиска, и я подтвердил, что min_price присутствует и доступен, когда выполняется запрос sql.

Я проверил, что новый код успешно отправлен как на github, так и на heroku.

Я открыл билет с heroku, они предложили мне попробовать dataclips. Запрос dataclips работает, как ожидалось .... диапазон цен возвращает соответствующие списки с ценами в пределах диапазона.

Тем не менее, запрос не работает в промежуточной среде, но в моей среде разработки все в порядке .

Кто-нибудь сталкивался с этим?

...