#ruby-on-rails #ruby
Вопрос:
У меня есть несколько контроллеров. и у меня есть такой метод фильтрации.
def filter(filtering_params)
results = where(nil)
filtering_params.each do |key, value|
results = results.public_send(key, value) if value.present?
end
results
end
и из контроллеров я буду вызывать index или показывать API, используя параметры фильтрации, например, как это.
def filtering_params
params.slice(:status, :created_at, :id, :transaction_datetime, :portfolio_external_reference_id, :file_id, :file_name)
end
который я буду использовать при извлечении из API, как это.
def index
records = Module::Class.filter(filtering_params)
render json: {
data: records
}
end
Я хочу написать универсальный метод, который можно использовать в тех случаях, когда мне нужны все доступные атрибуты в конкретной модели в качестве параметров фильтрации. есть ли лучший способ, чем написать все атрибуты?
Комментарии:
1. если я не ошибаюсь, если вы живете в фильтрации параметров, просто
params
вместоparams.slice(:status...
этого следует возвращать все параметры2. Если я это сделаю, не сделает ли это службу более уязвимой?
Ответ №1:
Я решил эту проблему, и она работает на меня.
def filter_params(params)
values = params.slice(*column_names.map(amp;:to_sym))
filter(values)
end