Как добавить фильтрацию - PullRequest
       2

Как добавить фильтрацию

0 голосов
/ 06 сентября 2018

Мне нужно сделать это, чтобы выполнить фильтрацию по контрагенту, я знаю, что мне нужно добавить такую ​​возможность только в контроллере, написать новый nethod, а затем добавить его полностью с фильтрацией, но я не знаю, что я должен делать.

В этот файл мне нужно добавить сам фильтр, этот код написан на реакции.

filter.js

import React, { Component, PropTypes } from 'react';
import Select                          from 'react-select';
import moment                          from 'moment';
import * as utils                      from '../../utils';

export default class RegistersFilter extends Component {
  static propTypes = {
    filter: PropTypes.object.isRequired,
    current: PropTypes.object.isRequired,
    handleFilterChange: PropTypes.func.isRequired
  };

  render() {
    const { filter, current, handleFilterChange } = this.props;
    const monthsNames = moment.monthsShort();
    const options = {
      years: filter.years.map((year) => {
        return { value: year, label: year };
      }),
      months: monthsNames.map((monthName, index) => {
        return { value: index + 1, label: monthName };
      })
    }

    return(
      <div className="registers-filter">
        <Select
          name="years"
          className="registers-filter-select"
          onChange={handleFilterChange('year')}
          options={options.years}
          value={current.year}
        />
        <Select
          name="months"
          className="registers-filter-select"
          onChange={handleFilterChange('month')}
          options={options.months}
          value={current.month}
        />
      </div>
    )
  }
}

И в этом файле мне нужно добавить метод, это ruby ​​на рельсах.

registers.rb

class Register < ApplicationRecord
  belongs_to :workspace
  belongs_to :article, counter_cache: true
  belongs_to :counterparty, counter_cache: true
  belongs_to :client, class_name: 'Counterparty'
  belongs_to :sales_manager, class_name: 'Counterparty'

  validates :date, :value, :article_id, :workspace_id, presence: true
  validates :value, numericality: true

  scope :years, -> {
    distinct.pluck('cast(extract(year from date) as integer)')
            .sort { |a, b| b.to_i <=> a.to_i }
  }

  scope :extract_by_date, -> (props) {
    if props[:months].present?
      extract_by(:year, props[:years]).extract_by(:month, props[:months])
    else
      extract_by(:year, props[:years])
    end
  }

  scope :extract_by, -> (name, value) {
    return unless value.present?
    term = value.kind_of?(Array) ? 'IN (?)' : '= ?'
    where("cast(extract(#{name.to_s} from date) as integer) #{term}", value)
  }

  scope :by_page, -> (page) {
    if (page)
      per_page = 20
      offset(page.to_i * per_page).limit(per_page)
    end
  }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...