У меня есть модель пользователя с атрибутом role
(String). Я хочу отфильтровать своих пользователей по этому атрибуту роли.
Для фильтрации я использую гем filterific. Вот мое index
действие:
def index
@filterrific = initialize_filterrific(
User,
params[:filterrific],
select_options: {
with_role: User.options_for_select
},
) or return
@users = @filterrific.find.page(params[:page])
end
где определен метод options_for_select
:
# user.rb
def self.options_for_select
order('LOWER(role)').map { |e| [e.role, e.id] }
end
и на мой взгляд:
<%= f.select(
:with_role,
@filterrific.select_options[:with_role],
{ include_blank: '- Any -' }
) %>
и у меня есть область в моем user.rb:
scope :with_role, lambda { |roles|
where(role: [*roles])
}
У меня всего пять ролей, но в моем выборе каждая роль появляется много раз, поэтому я не знаю, как вернуть уникальные роли в методе options_for_select
.
Во-вторых, options_for_select
возвращает идентификатор пользователя в качестве значения в каждом теге параметра, но я хочу, чтобы он возвращал саму роль.