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

这是我试过的查询:

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

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

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

 @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问题中找到所有这些东西。

最好使用动态参数来避免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)