ransack主要用于搜索
用法
<div class="form-input-hr">
<%= text_field_tag("query[name_cont]", params["query"] && params["query"]["name_cont"]) %>
</div>
products = Product.ransack(params[:query])
@sort = params[:sort].blank? ? 'id' : params[:sort]
@order = params[:order].blank? ? 'desc' : params[:order]
if @order == 'desc'
@next_order = 'asc'
else
@next_order = 'desc'
end
@products = paginate(products.result.includes(:shop).order("#{@sort} #{@order}"))
说明:
*_eq
- equal*_not_eq
- not equal*_matches
- matches withLIKE
, e.g.q[email_matches]=%@gmail.com
- Also:
*_does_not_match
,*_matches_any
,*_matches_all
,*_does_not_match_any
,*_does_not_match_all
*_lt
- less than*_lteq
- less than or equal*_gt
- greater than*_gteq
- greater than or equal*_present
- not null and not empty, e.g.q[name_present]=1
(SQL:col is not null AND col != ''
)*_blank
- is null or empty. (SQL:col is null OR col = ''
)*_null
,*_not_null
- is null, is not null*_in
- match any values in array, e.g.q[name_in][]=Alice&q[name_in][]=Bob
*_not_in
- match none of values in array*_lt_any
,*_lteq_any
,*_gt_any
,*_gteq_any
- Compare to list of values, at least positive. (SQL:col > value1 OR col > value2
)*_matches_any
,*_does_not_match_any
- same as above but withLIKE
*_lt_all
,*_lteq_all
,*_gt_all
,*_gteq_all
- Compare to list of values, all positive. (SQL:col > value1 AND col > value2
)*_matches_all
,*_does_not_match_all
- same as above but withLIKE
*_not_eq_all
- none of values in a set*_start
,*_not_start
,*_start_any
,*_start_all
,*_not_start_any
,*_not_start_all
- start with, (SQL:col LIKE 'value%'
)*_end
,*_not_end
,*_end_any
,*_end_all
,*_not_end_any
,*_not_end_all
- end with, (SQL:col LIKE '%value'
)*_cont
,*_cont_any
,*_cont_all
,*_not_cont
,*_not_cont_any
,*_not_cont_all
- contains value, usingLIKE
*_true
,*_false
- is true and is false