##概要
ransack是一个用来实现检索功能的gem。
github地址: https://github.com/activerecord-hackery/ransack
示例网站:http://ransack-demo.herokuapp.com
##安装
1 | gem 'ransack' |
然后执行bundle就可以了。
##使用方法
在controller中如下使用,注意参数:q为ransack的固定写法。里面放了view传过来的检索项的值。
1 | def index |
view中的写法如下。
1 | <%= search_form_for @q do |f| %> |
##search的写法
eq表示等于
1 | Item.search(:name_eq => 'test').result.to_sql |
lt表示小于
1 | Item.search(:price_lt => 1000).result.to_sql |
gt表示大于
1 | Item.search(:price_gt => 1000).result.to_sql |
in表示sql中的in1
2Item.search(:category_id_in => [5,10,15,20]).result.to_sql
# => "SELECT `items`.* FROM `items` WHERE `items`.`category_id` IN (5,10,15,20))"
cont表示包含,模糊查询
1 | Item.search(:name_cont => 'test').result.to_sql |
start表示前端一致
1 | Item.search(:name_start => 'test').result.to_sql |
组合用法
1 | Item.search(:name_and_description_cont => 'test').result.to_sql |
条件组合
末尾加_all是AND关系,末尾加_any是OR关系
1 | Item.search(:name_cont_all => ['AAA', 'BBB']).result.to_sql |
相关模型检索
1 | Item.search(:comments_body_cont => 'test').result.to_sql |
##表头排序
1 | <%= sort_link(@q, :name) %> |
加别名,加默认排序
1 | <%= sort_link(@q, :name, 'Last Name', default_order: :desc) %> |