一. Ransack 是什么?
Ransack是rails中用来做搜索的一个gem。
二. Ransack 怎么用?
1 | #controller document |
1 | # views document |
这里只是简单的用法介绍,另外还有高级用法,这里不再赘述,具体用法可以参见https://github.com/activerecord-hackery/ransack/blob/master/README.md
三. Ransack 原理
Ransack用来做模糊(LIKE)查询。当我们使用Ransack进行查询时,它会通过Active Record 执行sql语句,去搜索并且返回与输入字符相匹配的结果,查询日志代码如下:1
SELECT `tbl_account`.* FROM `tbl_account` WHERE (`tbl_account`.`account` LIKE '%玩家%' LIKE '%joe%')
这样会查询中带有“joe”关键字的所有用户,我们可以直接将rails查询语句转化为sql语句,来弄清ransack查询的真相。1
2
3
4
5
6 account_cont: "jonathan").result.to_sql # account为tbl_account这张表中的一个字段。 TblAccount.ransack(
=> SELECT `tbl_account`.* FROM `tbl_account` WHERE (`tbl_account`.`account` LIKE 'jonathan')
相当于
"account like ?", "%jonathan%") TblAccount.where(
=> SELECT `tbl_account`.* FROM `tbl_account` WHERE (account like 'jonathan')
PS: 关于ransack中的cont以及其他搜索条件介绍,请参考这篇文章