Object-based searching:演示。

git:  https://github.com/activerecord-hackery/ransack

Gorails视频和我的博客记录:https://www.cnblogs.com/chentianwei/p/9822492.html

对比类似的搜索gem 'searchkich'

全栈课上有这个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用于决定匹配什么信息。

查看:Ransack定义的全部predicate

详细的小例子: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✨) 简单介绍的更多相关文章

  1. (GoRails)在导航栏增加自动的搜索功能(jquery插件:easyautocomplete)(gem 'ransack' 搜索对象4000✨)

    Global Autocomplete Search 需要用到一个JQuery插件和一个搜索对象的gem EasyAutocomplete jQuery插件: https://github.com/p ...

  2. 内核调试神器SystemTap — 简单介绍与使用(一)

    a linux trace/probe tool. 官网:https://sourceware.org/systemtap/ 简单介绍 SystemTap是我眼下所知的最强大的内核调试工具,有些家伙甚 ...

  3. CocoaPods的简单介绍及安装和使用

    CocoaPods的简单介绍及安装和使用   一.CocoaPods是什么? 当你开发iOS应用时,会常常使用到非常多第三方开源类库.比方JSONKit.AFNetWorking等等. 可能某个类库又 ...

  4. [原创]关于mybatis中一级缓存和二级缓存的简单介绍

    关于mybatis中一级缓存和二级缓存的简单介绍 mybatis的一级缓存: MyBatis会在表示会话的SqlSession对象中建立一个简单的缓存,将每次查询到的结果结果缓存起来,当下次查询的时候 ...

  5. 利用Python进行数据分析(7) pandas基础: Series和DataFrame的简单介绍

    一.pandas 是什么 pandas 是基于 NumPy 的一个 Python 数据分析包,主要目的是为了数据分析.它提供了大量高级的数据结构和对数据处理的方法. pandas 有两个主要的数据结构 ...

  6. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  7. yii2的权限管理系统RBAC简单介绍

    这里有几个概念 权限: 指用户是否可以执行哪些操作,如:编辑.发布.查看回帖 角色 比如:VIP用户组, 高级会员组,中级会员组,初级会员组 VIP用户组:发帖.回帖.删帖.浏览权限 高级会员组:发帖 ...

  8. angular1.x的简单介绍(二)

    首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块 ...

  9. Linux的简单介绍和常用命令的介绍

    Linux的简单介绍和常用命令的介绍 本说明以Ubuntu系统为例 Ubuntu系统的安装自行百度,或者参考http://www.cnblogs.com/CoderJYF/p/6091068.html ...

随机推荐

  1. 从Git上导入Maven 项目到Eclipse

    Note: 经验之谈,操作过程中有不懂的地方可以留言问. Step: Open the Eclipse: --1.File>>Import>>Git:Project from ...

  2. jsp+ajax+servlet+jquery从后台取json数据示例

    <span style="font-size:18px;"><%@ page language="java" import="jav ...

  3. Icons - Material Design各种ICON图标大全

    Icons - Material Design https://material.io/tools/icons/?icon=account_balance&style=baseline

  4. 振兴中华|2013年蓝桥杯A组题解析第三题-fishers

    标题: 振兴中华 小明参加了学校的趣味运动会,其中的一个项目是:跳格子. 地上画着一些格子,每个格子里写一个字,如下所示:(也可参见p1.jpg) 从我做起振 我做起振兴 做起振兴中 起振兴中华 比赛 ...

  5. 2018年第九届蓝桥杯B组题C++汇总解析-fishers

    2018年第九届蓝桥杯B组题C++解析-fishers 题型 第一题:第几天 第二题:明码 第三题:乘积尾零 第四题:测试次数 第五题:快速排序 第六题:递增三元组 第七题:螺旋折线 第八题:日志统计 ...

  6. Spyder 调出绘图界面

    Tools->Preference->IPython console->Graphics->Graphics backend->QT4 or QT5

  7. JQ插入节点方法

    1.append()  appendTo()  prepend() prependTo() 2. before() insertBefore() after() insertAfter()

  8. hihoCoder week4 Trie图

    ac自动机 题目链接 https://hihocoder.com/contest/hiho4/problem/1 参考:https://blog.csdn.net/baidu_30541191/art ...

  9. Android Studio 快捷键、Debug的使用

    https://blog.csdn.net/q908555281/article/details/49331371 1.快捷键      个人习惯常用快捷键      在Eclipse中常用的快捷键 ...

  10. 【一】、搭建Hadoop环境----本地、伪分布式

    ##  前期准备 1.搭建Hadoop环境需要Java的开发环境,所以需要先在LInux上安装java 2.将    jdk1.7.tar.gz 和hadoop 通过工具上传到Linux服务器上 3. ...