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%')


转载于:https://www.cnblogs.com/chentianwei/p/9999326.html

gem ransack(4000✨) 简单介绍相关推荐

  1. plsql的环境与介绍:环境的搭建和plsql的简单介绍

    PLSQL编程 1.环境的搭建 (1)创建一个存储表空间 SQL> conn /as sysdba Connected. SQL> create tablespace plsql data ...

  2. kafka的简单介绍以及docker-compose部署单主机Kafka集群

    Kafka简单介绍 Kafka是由Apache软件基金会开发的一个分布式.分区的.多副本的.多订阅者的开源流处理平台,由Scala和Java编写.Kafka是一种高吞吐量的分布式发布订阅消息系统,它可 ...

  3. 遗传算法的简单介绍以及模式定理的简单证明

    遗传算法   遗传算法(Genetic Algorithm,GA),最早是由美国的John holland在20世纪70年代提出.算法通过模拟达尔文生物进化论的自然选择以及遗传学机理的生物进化过程来搜 ...

  4. 2021年大数据ELK(十八):Beats 简单介绍和FileBeat工作原理

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Beats 简单介绍和FileBeat工作原理 一.Beats 二.FileB ...

  5. 2021年大数据ELK(十五):Elasticsearch SQL简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 Elasticsearch SQL简单介绍 一.SQL与Elasticsear ...

  6. 2021年大数据ELK(二):Elasticsearch简单介绍

    全网最详细的大数据ELK文章系列,强烈建议收藏加关注! 新文章都已经列出历史文章目录,帮助大家回顾前面的知识重点. 目录 系列历史文章 一.Elasticsearch简介 1.介绍 2.创始人 二.E ...

  7. iOS开发UI篇—多控制器和导航控制器简单介绍

    iOS开发UI篇-多控制器和导航控制器简单介绍 一.多控制器 一个iOS的app很少只由一个控制器组成,除非这个app极其简单.当app中有多个控制器的时候,我们就需要对这些控制器进行管理 有多个vi ...

  8. 简单介绍一下R中的几种统计分布及常用模型

    统计学上分布有很多,在R中基本都有描述.因能力有限,我们就挑选几个常用的.比较重要的简单介绍一下每种分布的定义,公式,以及在R中的展示. 统计分布每一种分布有四个函数:d――density(密度函数) ...

  9. LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍

    LVS(Linux Virtual Server)三种负载均衡模型和十种调度的简单介绍 LVS (Linux Virtual Server) LVS(Linux Virtual Server)其实就是 ...

最新文章

  1. skiller v3 beta2_S10全球总决赛:赛前叫嚣却遭打脸!V3被LGD踢出S10,日本撸友彻底炸锅:真是悲哀...
  2. akaze特征匹配怎么去掉不合适的点_一种无人机滑坡遥感影像的快速匹配算法
  3. matlab画梅花,基于Matlab图像素描生成算法究.doc
  4. WebRequest 请求被中止: 请求已被取消。 错误解决方法
  5. MySQL——外部数据的批量导入
  6. VS2008,GDIPlus初步
  7. MyBatis-面试题
  8. 十年前乔布斯曾试图颠覆电视行业 如今苹果终于出手了
  9. gssh推送 Warning: Permanently added 'gitee.com’to the list of known hosts.
  10. 微信小程序之表单验证
  11. SQL已知现在的某一天求去年的同一天或去年同月份的第一天
  12. html界面嵌入网易云,使用flex进行网易云音乐界面构建和布局解析(1)
  13. 科来网络全流量安全分析系统[Study]
  14. 学python-当当发布2020程序员新态:左手Python,右手机器学习
  15. 用vue-cli3导入外部的iconfont.css图标样式遇到的坑:These relative modules were not found:...
  16. PB调用DLL的常见问题及处理方法
  17. WIN7笔记本 用户账户登录密码忘记/错误解决方法
  18. Everything研究之快速获取USN记录的文件路径
  19. android点击展开全文,Android显示全文折叠控件使用方法详解
  20. 解决方案之Android 国际化资源完美兼容6.0,7.0,8.0

热门文章

  1. 利用信号进行进程之间的通信
  2. SQL注入之union联合注入——sql-lab第一关(非常非常详细的过程)
  3. 实验五 编写、调试具有多个段的程序
  4. Flex学习的利器《Hello Flex4》
  5. OpenGL动感模糊
  6. Java接口(interface)的概念及使用
  7. Java类库及其组织结构(Java API)
  8. spark 写tidb_优秀的数据工程师,怎么用Spark在TiDB上做OLAP分析
  9. 简述osi参考模型各层主要功能_计软考研双日练 | OSI参考模型各层提供什么服务?...
  10. redhat yum 安装 mysql_RedHat/CentOS 为yum安装remi源 | 学步园