Ransack
Ransack 是一个支持搜索和排序的 gem。可以在这里看到详细介绍。
安装
gem ransack
然后
bundle install
使用
View中
使用ransack
提供的帮助方法生成表单
<%= search_form_for @q, html: {class: "navbar-form navbar-left"} do |f| %>
<div class="form-group">
<%= f.search_field :name_or_description_cont, class: "form-control", placeholder: "输入商品名" %>
<%= f.submit "搜索", class: "btn btn-warning" %>
<%=sort_link(@q, :name) %>
</div>
<% end -%>
上面代码中的name_or_description_cont
指搜索name
和description
而sort_link
则指可以通过点击该链接来按照name
进行排序
cotroller中
def index
@q = Product.ransack(params[:q])
@products = @q.result(distinct: true)
end
如此即可。当然还有很多用法,可参考这里
ranscak的一些搜索条件
来源:https://ruby-china.org/topics/29556
eq: "等于"
eq_any: "等于任意值"
eq_all: "等于所有值"
not_eq: "不等于"
not_eq_any: "不等于任意值"
not_eq_all: "不等于所有值"
matches: "符合"
matches_any: "符合任意条件"
matches_all: "符合所有条件"
does_not_match: "不符合"
does_not_match_any: "符合任意条件"
does_not_match_all: "不符合所有条件"
lt: "小于"
lt_any: "小于任意一个值"
lt_all: "小于所有值"
lteq: "小于等于"
lteq_any: "小于等于任意一个值"
lteq_all: "小于等于所有值"
gt: "大于"
gt_any: "大于任意一个值"
gt_all: "大于所有值"
gteq: "大于等于"
gteq_any: "大于等于任意一个值"
gteq_all: "大于等于所有值"
in: "被包含"
in_any: "被任意值包含"
in_all: "被所有值包含"
not_in: "不被包含"
not_in_any: "不被任意值包含"
not_in_all: "不被所有值包含"
cont: "包含"
cont_any: "包含任意一个值"
cont_all: "包含所有值"
not_cont: "不包含"
not_cont_any: "不包含任意一个值"
not_cont_all: "不包含所有值"
start: "以改值开始"
start_any: "以任意一个值开始"
start_all: "以所有值开始"
not_start: "不以改值开始"
not_start_any: "不以任意一个值开始"
not_start_all: "不以所有值开始"
end: "以改值结尾"
end_any: "以任意一个值结尾"
end_all: "以所有值结尾"
not_end: "不以改值结尾"
not_end_any: "不以任意一个值结尾"
not_end_all: "不以所有值结尾"
'true': "等于true"
'false': "等于false"
present: "有值"
blank: "为空"
'null': "是null"
not_null: "不是null"