我有一个简单的表格,显示所有用户及其属性ID,姓名,年龄,状态,位置。我想过滤年龄和状态。
Id name age status location
1 xz 22 single ca
2 yy 23 married ma
我正在使用filterrific插件并能够显示列表和过滤器下拉列表。
我的user.rb
filterrific(
available_filters: [
:with_status,
:with_age
]
)
scope :with_age, lambda { |age|
where(age: [*age])
}
scope :with_status, lambda { |status|
where(status: [*status])
}
def self.options_for_select
order('LOWER(status)').map { |e| [e.status] }.uniq
end
def self.options_for_select2
order('LOWER(age)').map { |e| [e.age] }.uniq
end
控制器索引看起来像
def index
@filterrific = initialize_filterrific(
User,
params[:filterrific],
select_options: {
with_status: User.options_for_select,
with_clearance_batch_id: User.options_for_select2
},
default_filter_params: {},
available_filters: [],
) or return
@users = @filterrific.find
respond_to do |format|
format.html
format.js
end
end
index.html.erb看起来像
<%= form_for_filterrific @filterrific do |f| %>
<div>
age
<%= f.select(
:with_age,
@filterrific.select_options[:with_age],
{ include_blank: '- Any -' },
{class: 'form-control' }
) %>
</div>
<div>
status
<%= f.select(
:with_status,
@filterrific.select_options[:with_status],
{ include_blank: '- Any -' },
) %>
</div>
<% end %>
<%= render(
partial: 'browse_users/list',
locals: { users: @users }
) %>
当我进入该页面时,我能够看到所有用户。现在,当我过滤没有任何反应。我仍然看到所有用户。不确定发生了什么。我觉得我的范围过滤器没有得到应用。
答案 0 :(得分:0)
对我来说这就是诀窍:
还有一件事:当我想根据另一个表中的字段(遵循belongs_to外键关系)进行排序时,我也遇到了问题。如果我在github(https://github.com/jhund/filterrific_demo/blob/master/app/models/student.rb)中的示例应用程序的源代码中提到它:
&#34; order(&#34; LOWER(countries.name)#{direction}&#34;)。includes(:country)&#34;
我遇到了SQL错误。当我把它改成类似
的东西时&#34;加入(:country).order(&#34; LOWER(countries.name)#{direction}&#34;)&#34;
它解决了这个问题。