saucy/app/controllers/concerns/member_filter.rb

39 lines
1.2 KiB
Ruby

module MemberFilter
extend ActiveSupport::Concern
def filtered_members
members = Member.all.order(sort_params.merge(number: :asc))
filters = params.permit(:prefers_postal, :display_name, :email, :identification_number, status: [], category: [])
Rails.logger.info filters
status = filters.fetch(:status, []) - ['any', '']
category = filters.fetch(:category, []) - ['any', '']
members = members.where(prefers_postal: true) if filters[:prefers_postal] == 'yes'
members = members.where(prefers_postal: false) if filters[:prefers_postal] == 'no'
members = members.where(status: status) if status != []
members = members.where(category: category) if category != []
members.ransack(
display_name_i_cont: filters[:display_name],
email_i_cont: filters[:email],
identification_number_i_cont: filters[:identification_number],
).result
end
def sort_params
field, direction = params.fetch(:sort, "").split(".")
directions = %w[ asc desc ]
fields = %w[ number expires_on joined_on email status display_name ]
if directions.include?(direction) && fields.include?(field)
{ field => direction }
else
{ number: :asc }
end
end
end