新手问题 希望在 ROR 实现单表内全字段搜索

thanatos · 2015年07月09日 · 最后由 thanatos 回复于 2015年07月10日 · 2422 次阅读

totally 新手,0 开发经验,刚看完 tutor,现在自己做一个小应用练手,里面有一个搜索的功能,卡主了,木有头绪。google 了半天都是介绍一些 gem 的,我没有那么复杂的需求,就是对某个表进行全字段搜索,麻烦给个方向,谢谢!

----------------------------------华丽的分割线------------------------------------------

感谢大家积极回复,感动不已。再清晰一下需求。 有一个 information model,用来记录一条条多字段信息; 想在页面上实现一个 search bar,在里面键入内容后模糊搜索(我理解为 like)就行,匹配全表全字段。

如果这说的还不足清晰,请指正,谢谢!

你想怎么搜索?

既然楼主没有复杂的需求,那请给出你明确的简单需求,不然大家看了你的帖子都不知道怎么来提供帮助,^.^

#1 楼 @huacnlee 感谢答复,有一个 information model,用来记录一条条多字段信息; 想在页面上实现一个 search bar,在里面键入内容后模糊搜索(我理解为 like)就行,匹配全表全字段。

#2 楼 @luolinae86 感谢答复,有一个 information model,用来记录一条条多字段信息; 想在页面上实现一个 search bar,在里面键入内容后模糊搜索(我理解为 like)就行,匹配全表全字段。

比如根据 Information 里面 name 字段进行模糊查询,可以这样: Information.where(" name like ?", params[:name])

#5 楼 @luolinae86 谢谢,是酱紫的,但是有两个问题:1、我知道 params[:name],但是怎么让它同时搜索其它字段?2、看了 railscast 里面关于 simple search 的内容,能够理解,但是返回的内容怎么 view 出来不太懂……

好奇怪的需求,不过 rails 应该没有内建的方法吧,要自己动手。 是这样理解么:

全字段 = Information.attribute_names # 可以 reject 一下
条件 = 全字段.collect{|f| "#{Information.table_name}.#{f} LIKE ?"}.join(' OR ')
查询 = "%#{params[:name]}%"
 = [查询] * 全字段.length
结果 = Information.where(条件, *)

为什么没有人说:用 elasticsearch 呀

#7 楼 @gihnius 其实我就是想问问有啥自动挡的方法……做这个小应用一路过来 google,全是自动挡,我都习惯了……

不知道用 ransack 这个 gem 能否满足要求,支持多字段 like 检索,自己看下文档吧

简单的就直接上ransack,否则就上elasticsearch吧!!!

elasticsearch gem list

全字段搜索在数据量大的时候会死慢死慢。

#12 楼 @msg7086 我这个小应用数据量不大,全表条目也就只有 6K,字段不超过 26 个

需要 登录 后方可回复, 如果你还没有账号请 注册新账号