Мне нужно сделать это, чтобы выполнить фильтрацию по контрагенту, я знаю, что мне нужно добавить такую возможность только в контроллере, написать новый 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