#ruby-on-rails #ruby #ruby-on-rails-5
#ruby-on-rails #ruby #ruby-on-rails-5
Вопрос:
У меня есть текущая область, которая не работает.
Но объясняет, чего я пытаюсь достичь.
scope :range, -> (start_date, end_date) { where("orders.created_at BETWEEN (?) AND (?)", start_date.to_date, end_date.to_date)}
Я ищу способ получить все заказы между двумя заданными датами.
Я правильно указываю параметры.
http://localhost:3000/api/v1/reports/organisations/1/sales-reports?range[start_date]=2020-12-27amp;range[end_date]=2020-12-28
Буду признателен за любую помощь в области, которая подходит для моего варианта использования.
Комментарии:
1. Здесь нужно добавить немного контекста. Я видел, что в вашем ответе упоминается использование
has_scope
, но оно не написано здесь. Кроме того, вы должны попытаться сказать, что вы получали вместо ожидаемых значений.
Ответ №1:
О чем я думаю, так это о критериях, которые вы используете orders.created_at
вместо того, чтобы просто created_at
использовать.
Кроме того, это делает ActiveRecord ответственным за написание SQL вместо себя.
scope :range, ->(start_date, end_date) { where(created_at: start_date.to_date..end_date.to_date) }
Кроме того, я бы попытался передать start_date
и end_date
как даты, потому что вы говорите, что это даты, а не строковые представления дат.
Комментарии:
1. Спасибо, это намного более лаконично и читаемо
Ответ №2:
Оказывается, что, поскольку я использую драгоценный камень has_scope.
все, что мне было нужно, это использовать опцию «using».
has_scope :range, using: %i[start_date end_date], type: :hash