Фильтрация по атрибуту в Rails с помощью гема Filterific

У меня есть модель пользователя с атрибутом 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 возвращает идентификатор пользователя в качестве значения в каждом теге параметра, но я хочу, чтобы он возвращал саму роль.


person yerassyl    schedule 07.07.2015    source источник


Ответы (1)


Вы определяете options_for_select в модели User. Таким образом, он извлекает каждую запись пользователя в вашей базе данных и связанную с ней запись роли вместе с идентификатором пользователя.

Попробуйте следующее вместо User.options_for_select в контроллере:

select_options: {
  with_role: ['Role1', 'Role2', 'Role3']
},
person Jo Hund    schedule 14.07.2015