Я создаю отфильтрованную таблицу для моей пользовательской модели.Я создал несколько областей для их фильтрации.Я:
class User < ApplicationRecord
has_many :invoices
scope :application_approved, -> { ... }
scope :application_denied, -> { ... }
scope :latest_invoice_paid, -> { ... }
scope :latest_invoice_not_paid, -> { ... }
def self.__self__
self
end
end
и в контроллере:
def index
filters = params[:statuses] || {}
application_status = filters[:application_status].presence
payments_status = filters[:payments_status].presence
@vehicles = Vehicle.send(application_status || :__self__)
.send(payment_status || :__self__)
.paginate(:page => params[:page], :per_page => 10)
.order('created_at DESC')
end
Все фильтры работают изолированно, однако, когда они объединены в цепочку, фильтры, которые не применяются, похоже, отменяют ранеефильтры.
Например, если я установил фильтр, чтобы показывать только пользователей, которые заплатили, он работает.Но если я установлю фильтр, чтобы показывать только пользователей, которые были одобрены / не одобрены, все пользователи будут возвращаться все время.Кажется, что возвращение self
, когда фильтр не применен, просто возвращает всех пользователей.
Итак, как я могу пропустить область, если для нее не применен фильтр?