gem "ransack"(4000✨) 简单介绍
git: https://github.com/activerecord-hackery/ransack
Gorails视频和我的博客记录:https://www.cnblogs.com/chentianwei/p/9822492.html
全栈课上有这个gem的介绍:https://www.cnblogs.com/chentianwei/p/9438461.html
ransack 会用数据库的 LIKE 语法来做搜寻,虽然用起来方便,但它会逐笔检查资料是否符合,而不会使用数据库的索引。如果数据量非常多有上万笔以上,搜寻效能就会不满足我们的需要。这时候会改安装专门的全文搜寻引擎,例如 Elasticsearch,这是大数据等级的。
之前的博客(全栈)https://www.cnblogs.com/chentianwei/p/9438461.html
Gem "Ransack"
Ransack enables the creation of both simple and advanced search forms for your Ruby on Rails application。
Ransack不是在model层和controller层的简化搜索.
Ransack用于创建搜索表格form.
A form is a paper with questions on it and spaces marked where you should write the answers. A table is a written set of facts and figures arranged in columns and rows.
Controller
def index
@q = Person.ransack(params[:q])
@people = @q.result(distinct: true)
end #如果在一个关联的table的column上进行sorting. 不使用distinct: true #下面的例子将预加载preloadingPerson's Articles表格,并使用pagination gem插件。所以去掉distinct: true选项 def index
@q = Person.ransack(params[:q])
@people = @q.result.includes(:articles).page(params[:page]) #可以附加to_a.uniq,把relation对象转化为Array,使用uniq方法去掉重复记录。
end
View
定义了2个helper
- search_form_for: 取代form_for用于创建view的 search form
- sort_link:给table headers添加上可sortable links。
具体用法:
看演示 http://ransack-demo.herokuapp.com
search_form_for
<%= search_form_for @q do |f| %>
# name是User的column
<%= f.label :name_cont %>
<%= f.search_field :name_cont%> # 如果搜索关联表格Article的column: 用articles_title_start
<%= f.label :articles_title_start %>
<%= f.search_field :articles_title_start %> #属性可以链接到一起进行查询,例如User有2个相关columns: first_name和last_name
<%= f.label :first_name_or_last_name_cont %>
<%= f.text_field :first_name_or_last_name_cont%>
<% end %>
解释:
f.search_field的参数的格式:
attribute_name[_or_attribute_name]..._predicate #如first_name_or_last_name_cont
search predicate:搜索谓语
在Ransack搜索中, Predicates用于决定匹配什么信息。
详细的小例子:https://github.com/activerecord-hackery/ransack/wiki/Basic-Searching
例子:
cont(contains) :用于检查一个属性中是否包括一个值。
使用Like "%xxx%"语法。
>> User.ransack(first_name_cont: 'Rya').result.to_sql
=> SELECT "users".* FROM "users" WHERE ("users"."first_name" LIKE '%Rya%')
start(start_with)
LIKE "%xx" 开头是xxx, 类似正则表达式/^xxx/
>> User.ransack(first_name_start: 'Rya').result.to_sql
=> SELECT "users".* FROM "users" WHERE ("users"."first_name" LIKE 'Rya%')
gem "ransack"(4000✨) 简单介绍的更多相关文章
- (GoRails)在导航栏增加自动的搜索功能(jquery插件:easyautocomplete)(gem 'ransack' 搜索对象4000✨)
Global Autocomplete Search 需要用到一个JQuery插件和一个搜索对象的gem EasyAutocomplete jQuery插件: https://github.com/p ...
- 内核调试神器SystemTap — 简单介绍与使用(一)
a linux trace/probe tool. 官网:https://sourceware.org/systemtap/ 简单介绍 SystemTap是我眼下所知的最强大的内核调试工具,有些家伙甚 ...
- CocoaPods的简单介绍及安装和使用
CocoaPods的简单介绍及安装和使用 一.CocoaPods是什么? 当你开发iOS应用时,会常常使用到非常多第三方开源类库.比方JSONKit.AFNetWorking等等. 可能某个类库又 ...
- [原创]关于mybatis中一级缓存和二级缓存的简单介绍
关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...
- 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍
一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...
- 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍
一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...
- yii2的权限管理系统RBAC简单介绍
这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...
- angular1.x的简单介绍(二)
首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...
- Linux的简单介绍和常用命令的介绍
Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...
随机推荐
- Shell脚本,更改Info.plist中的日期等
#!/bin/bashroot_src=$(dirname $(PWD)) bundle_name='RandomDebbot.bundle' target_path=$root_src/ecovac ...
- 比较实用的前端 js框架 ,组件 汇总
一.js 前端ui框架 Kendo UI 商用收费,组件丰富,界面简洁美观,有jQuery和angular两个js的版本 Webix 商用收费,组件丰富,界面特别美观 JQwidgets 商用收费,丰 ...
- Eclipse查看Servlet源码
Eclipse查看Servlet源码 @(Java) 1.servlet-api 和 javax.servlet-api的区别 在正式查看Servlet源码前,我们首先要分清楚上述两个jar包的区别. ...
- Python3基础 list for+continue 输出1-50之间的偶数
Python : 3.7.0 OS : Ubuntu 18.04.1 LTS IDE : PyCharm 2018.2.4 Conda ...
- UFS和EMMC的区别--原理学习【转】
本文转载自:https://blog.csdn.net/shenjin_s/article/details/79761425 UFS PK EMMC UFS作为目前安卓智能手机最先进的非易失存储器(N ...
- ps一些疑问知识点
PS 的核心, 是 选择, 是 抠图, 不管是蒙版, 通道也好等等, 其实主要的作用还是 抠图. 还是精确地 选出你要处理的 内容对象! 如何改变工具预设? 使用工具预设, 可以将你当前正在使用的 / ...
- extjs使用笔记-21
yii是后台php框架 而yui是前端界面框架,是ajax框架 Extjs是建立在yui基础上的.不要搞混了. jquery的ready方法,是在文档已经加载完毕\图像完全显示后, 才载入执行的. 由 ...
- 再谈fedora下的音乐和视频播放器的安装
rpm包就相当于windows下的exe,已经是编译后的二进制代码,可以使用rpm命令或dnf install ???.rpm来安装 lnux下软件的安装跟windows不同, 后者要到处去找, 要做 ...
- Android中EditText焦点问题
https://www.jianshu.com/p/3d31d681f4bc 问题:当EditText失去焦点时做内容校验 场景:用户编辑EditText将内容清空,当点击空白地方时关闭软键盘,同时校 ...
- Mapreduce 历史服务 配置启动查看
如果没有进行配置的话,那个History是不可以进行点击的,点击进去就会报错!所以需要进行配置一下 使用命令启动HistoryServer 就可以查看任务执行的进度了 命令: sbin/mr-jobh ...