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 ...
随机推荐
- python --- 19 判断对象所属,区分函数和对象, 反射
一.判断对象所属 isinstance, type , issubclass 1.issubclass(x,y) 判断x是否是y 的子类 2.type(x) 精准返回x 的数据类型 3.isi ...
- How to use Junit Listener
JUnit Listeners If you want to do some operations when your tests are started, passed, finished, fai ...
- java 动态代理总结
首先:定义一个接口// 只能是一个接口 例: package DongTai; public interface dongtai { public void show(); } 接着:定义一个被代理类 ...
- Windows,远程计算机:X.X.X.X,这可能是由于CredSSP加密Oracle修正
https://blog.csdn.net/wyhwlls/article/details/80320301 近期window 10家庭版更新后,远程桌面连不到服务器了 网上有卸载补丁,修改组策略什么 ...
- P2257 YY的GCD(莫比乌斯反演)
第一次做莫比乌斯反演,推式子真是快乐的很啊(棒读) 前置 若函数\(F(n)\)和\(f(d)\)存在以下关系 \[ F(n)=\sum_{n|d}f(d) \] 则可以推出 \[ f(n)=\sum ...
- methods 方法选项
最简单的使用方法,一个数字,每点击一下按钮加1 html <div id="app"> <span v-text="number">&l ...
- final、finally、finalize的用法
final: 1.被final修饰的类,就意味着不能再派生出新的子类,不能作为父类而被子类继承 2.将变量或方法声明为final,可以保证他们在使用的过程中不被修改. 3.被final声明的方法也同样 ...
- 【C#】神奇的yeild
直接出栗子: class Program { static void Main(string[] args) { foreach (var item in FilterWithoutYield) { ...
- Google advertiser api开发概述
对象.方法和服务 AdWords API 主要供 AdWords 的高级用户使用.如果您是 AdWords 新手,或需要复习 AdWords 基本概念,请查看 AdWords 基础知识页面. 对象层级 ...
- C++中substr函数的用法
#include<iostream> #include<string> using namespace std; int main(){ string str("12 ...