Как я могу сделать это универсальным и сделать все доступные атрибуты в качестве параметров фильтрации?

#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