【问题标题】:SEARCH FIELD COLUMNS RAILS搜索字段列导轨
【发布时间】:2013-08-28 21:42:55
【问题描述】:

3.5 和红宝石 1.8.7

我想知道如何仅使用 1 个文本字段创建多个搜索字段,它还可以从同一个表中搜索 4 列(名称、名称 2、姓氏、姓氏 2)

VALUES ====>  name, name2, last_name and last_name2
TABLE ====> PROJECTS

FOR EXAMPLE =>   "Jagjit Smith   Sgnit     Robertson"
                  :name  :name2 :last_name :last_name 2

                 "Jagjit Smith"
                  :name :name2

                 "Jagjit Roberton"
                  :name   :last_name2

                  "Sgnit     Robertson"
                 :last_name :last_name2

我做了我的控制器、模型和视图,但似乎我有 sql 注入问题,但我想要代码解决方案没有 gems,请有人可以编辑这个或帮助我解决这个问题???我搜索了很多帖子和解决方案,但都是使用 gems 的 rails 3

 ***************HERE IS MY CONTROLLER****************
 Here some people told me that my code has vulnerability 
 is there any other way to make this code more cheape without write 24 conditions????

class ProjectsController < ApplicationController

def index
         @projects = Project.find(:all, :conditions => "(
          name LIKE \"#{params[:query]}%\" OR
          name2 LIKE \"#{params[:query]}%\" OR
          last_name LIKE \"#{params[:query]}%\"OR 
          last_name2 LIKE \"#{params[:query]}%\" OR 
          (concat(name, \" \", last_name) LIKE \"#{params[:query]}%\") OR
          (concat(name, \" \", name2    ) LIKE \"#{params[:query]}%\") OR 
          (concat(last_name, \" \", last_name2) LIKE \"#{params[:query]}%\") OR 
          (concat(name, \" \", name2, \" \",last_name, \" \",last_name2) LIKE \"#{params[:query]}%\") OR
          (concat(name, \" \", name2, \" \",last_name) LIKE \"#{params[:query]}%\")
                           )")
    end
 end

这是我的模型是空的,我需要帮助,也许是其他示例或添加一些东西

       *****HERE IS MY MODEL***************

       class Project < ActiveRecord::Base

       end

这是我的观点,实际上它正在工作并且有 24 个条件,我需要解决漏洞问题的技巧,并且不需要写很多条件

      ************HERE IS MY VIEW **************     

     <form name="search-form" id="search-form">
        <%= text_field_tag "query", params[:query], :autocomplete => 'on' %>
     </form>

【问题讨论】:

  • 为什么要避免使用 gems?
  • 至少你不把参数塞进一个字符串怎么样?如果这些是您的搜索条件,那么这些就是您的搜索条件。
  • 你知道密码吗?你怎么能解决这个问题?
  • Levi Stanley,如果我使用 gems,代码应该如何?

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1 ruby-on-rails-3.2


【解决方案1】:

好的...现在如果您的搜索字符串很复杂,您可以使用名为 Squeel 的 gem..

Checkout Squeel..

例如,

name LIKE \"#{params[:query]}%\" 将变为 name.like_any params[:query]

查看 Git 中心页面...他们有很多关于如何使用 Squeel 的示例...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-10-13
    • 1970-01-01
    • 2015-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多