Как я могу отфильтровать created_at по текущему году с помощью JSONAPI::Resources?

Я разрабатываю REST API Rails, используя JSONAPI::Resources. А некоторые ресурсы по умолчанию должны отправлять только записи, созданные в текущем году, но клиентское приложение также должно иметь возможность переопределить это поведение, чтобы получить более старые записи.

Я уже пытался добиться этого, создав этот пользовательский фильтр для ресурсов:

filter :current_year,
  apply: ->(records, value, _options) {
    if value[0] == 'true'
      records.where("date_part('year', created_at) = date_part('year', CURRENT_DATE)")
    else 
      records
    end
  }

Но с этим настраиваемым фильтром клиентское приложение всегда должно отправлять строку запроса filter[current_year]=true при каждом запросе, а я не хочу, чтобы это происходило.

Короче говоря, API всегда должен фильтровать записи по текущему году, а клиентское приложение должно иметь возможность отправлять фильтр для получения более старых записей.

Как я могу это сделать?


person ardmont    schedule 23.11.2019    source источник


Ответы (1)


Я не очень хорошо знаком с JSONAPI::Resources, но пробовали ли вы добавить параметр default?

filter :current_year,
  default: 'true',
  apply: ->(records, value, _options) {
    if value[0] == 'true'
      records.where("date_part('year', created_at) = date_part('year', CURRENT_DATE)")
    else 
      records
    end
  }
person Thắng Trần Xuân    schedule 25.11.2019