У меня есть модель Lead, в которой есть предварительно вычисленный столбец с плавающей точкой, называемый sms_price.Я хочу разрешить пользователям отправлять текстовые сообщения этим лидерам и назначать бюджет для их кампаний (что-то похожее на то, что вы можете найти в объявлениях fb).
Мне нужна область действия, которая может ограничивать количествоведет по общей цене этих клиентов.Например, если пользователь определил общий бюджет в 200
- id: 1 |sms_price: 0.5 |всего: 0,5
- id: 2 |sms_price: 1.2 |всего: 1.7
- id: 3 |sms_price: 0,9 |всего: 2,6
- ...
- id: 94 |цена смс: 0,8 |total_price: 199.4 <--- остановите запрос здесь </li>
- id: 95 |sms_price: 0.7 |total_price: 200,1
Итак, мне нужно две вещи в моей области:
- Рекурсивный подсчет общей цены
- Получить только потенциальных клиентов, которые имеют общую ценуниже желаемого бюджета
До сих пор мне удалось выполнить только первое задание ( Рекурсивно рассчитать общую цену ), используя эту область:
scope :limit_by_total_price, ->{select('"leads".*, sum(sms_price) OVER(ORDER BY id) AS total_price')}
Это работает, и если я делаю Lead.limit_by_total_price.last.total_price
, я получаю 38039.7499999615
Теперь мне нужен способ получить только те лиды, общая стоимость которых ниже, чем бюджет:
scope :limit_by_total_price, ->(budget){select('"leads".*, sum(sms_price) OVER(ORDER BY id) AS total_price').where('total_price < ?', budget)}
Но он не распознает атрибут total_price:
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR: column "total_price" does not exist
Почему он распознает атрибут total_price в одном объекте, а не в области?