【问题标题】:how can I use like query in ruby with sinatra?如何在带有 sinatra 的 ruby​​ 中使用 like 查询?
【发布时间】:2014-06-09 04:07:32
【问题描述】:

这是我尝试过的查询:

@blogs = DB[:blogs].where(:title => params[:s_txt]).reverse_order(:id)

在此查询中,我想在我的数据库中查找博客。我还需要创建一个为用户提供更多结果的查询。我该怎么做?

【问题讨论】:

  • 这和 Sinatra 有什么关系?

标签: ruby activerecord sinatra


【解决方案1】:

最好使用dynamic parameters来避免SQL注入:

@blogs = DB[:blogs].where("title LIKE ?", "%#{params[:s_txt]}%").reverse_order(:id)

@blogs = DB[:blogs].where("title LIKE :text", text: "%#{params[:s_txt]}%").reverse_order(:id)

您可以轻松地为此添加更多参数:

@blogs = DB[:blogs].where("title LIKE ? OR content LIKE ?", "%#{params[:s_txt]}%", "%#{params[:s_txt]}%").reverse_order(:id)

@blogs = DB[:blogs].where("title LIKE :text OR content LIKE :text", text: "%#{params[:s_txt]}%").reverse_order(:id)

【讨论】:

  • 感谢您的回答,这很好,很有效 :),但是如何按标题和内容之类的两个列进行搜索?
  • @AliOsm 我没有使用它们来聊天(我知道很老式),我在使用 Qt 和 QtRuby(green_shoes 人)方面经验有限,并且没有使用 QtCreator 组合,我对 QLM 很感兴趣,但是似乎没有与 Ruby 绑定,如果您有兴趣,请通过 daddie88@gmail.com 给我发邮件
【解决方案2】:

我也遇到了这个问题,只找到了这个解决方案

@blogs = DB[:blogs].where("title LIKE '%#{params[:s_txt]}%'").reverse_order(:id)

好奇有没有更好的方法..

在两个字段中搜索是重复 LIKE 并用 AND 或 OR 分隔

@blogs = DB[:blogs].where("title LIKE '%#{params[:s_txt]}%' 
  or comment LIKE '%#{params[:c_txt]}%'").reverse_order(:id)

或者这样做

@blogs = DB[:blogs].where("title||comment LIKE '%#{params[:s_txt]}%'").reverse_order(:id)

在 Sqlite 中测试并且可以正常工作。一个建议:在大表中,如果可能的话,你最好去掉第一个 %,因为数据库会在不使用索引的情况下进行全表扫描,但你可以在 sql 问题中找到所有这些东西。

【讨论】:

  • "title LIKE '%?%'", params[:s_txt] 是首选。
  • 感谢您的回答,这很好,很有效 :),但是如何按标题和内容之类的两个列进行搜索?
猜你喜欢
  • 1970-01-01
  • 2015-08-12
  • 2014-08-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多