日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

gem ransack(4000✨) 简单介绍

發(fā)布時間:2025/3/15 编程问答 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 gem ransack(4000✨) 简单介绍 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

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 會用數(shù)據(jù)庫的 LIKE 語法來做搜尋,雖然用起來方便,但它會逐筆檢查資料是否符合,而不會使用數(shù)據(jù)庫的索引。如果數(shù)據(jù)量非常多有上萬筆以上,搜尋效能就會不滿足我們的需要。這時候會改安裝專門的全文搜尋引擎,例如?Elasticsearch,這是大數(shù)據(jù)等級的。

之前的博客(全棧)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用于創(chuàng)建搜索表格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#如果在一個關(guān)聯(lián)的table的column上進行sorting. 不使用distinct: true#下面的例子將預(yù)加載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對象轉(zhuǎn)化為Array,使用uniq方法去掉重復(fù)記錄。 end

?

?

View

定義了2個helper

  • search_form_for: 取代form_for用于創(chuàng)建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%># 如果搜索關(guān)聯(lián)表格Article的column: 用articles_title_start<%= f.label :articles_title_start %><%= f.search_field :articles_title_start %>#屬性可以鏈接到一起進行查詢,例如User有2個相關(guān)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的參數(shù)的格式:

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

?


?

?

?

?

?

?

?

?

轉(zhuǎn)載于:https://www.cnblogs.com/chentianwei/p/9999326.html

總結(jié)

以上是生活随笔為你收集整理的gem ransack(4000✨) 简单介绍的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。