使用Filterific gem按Rails中的属性进行过滤

时间:2015-07-07 06:35:41

标签: ruby-on-rails filterrific

我的用户模型具有role(字符串)属性。我想通过此角色属性过滤我的用户。

使用filterific gem过滤我。 这是我的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会将用户的ID作为每个选项标记中的值返回,但我希望它自己返回角色。

1 个答案:

答案 0 :(得分:1)

您在options_for_select模型上定义User。因此,它会提取数据库中的每个用户记录及其关联的角色条目以及用户ID。

在控制器中尝试以下操作而不是User.options_for_select

select_options: {
  with_role: ['Role1', 'Role2', 'Role3']
},