我如何在sinatra中使用ruby中的查询?

时间:2014-06-06 12:18:36

标签: ruby activerecord sinatra

这是我试过的查询:

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

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

2 个答案:

答案 0 :(得分: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)

答案 1 :(得分:0)

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

@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中测试,它的工作原理。一个建议:在lage表中,如果可能的话,你最好删除第一个%,因为数据库将执行全表扫描,否则不使用索引,但你可以在sql问题中找到所有这些东西。