0

3.5 和 ruby​​ 1.8.7 我正在尝试创建一个使用 4 列(name、name2、last_name、last_name2)的多重搜索,想在文本框中搜索我的 4 列,但我不想创建 24 个条件,有没有其他方法可以做到这一点,或者可能创建一个条件 FOR 而不是 24 个条件

I want to search by
    name and name2
    name and name2 and last_name
    name and last_name
    last_name and last_name2
 ...
 There are 24 conditions

实际上我的控制器正在工作,但我不想写 24 个条件,这是我的问题

这是我的模型是空的

  ****************Here is my model************

 class Project < ActiveRecord::Base

 end

这是我的控制器

*************Here is my controller****************

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 view

<div id="search-area">
  <div id="searchbox">
     <form name="search-form" id="search-form">
       <label for="query"><%= ('BUSCAR') %>
        <%= image_tag("loader.gif",
                     :align => "absmiddle",
                     :border => 0,
                     :id => "loader",
                     :style =>"display: none;" ) %>
      </label>
        <%= text_field_tag "query", params[:query], :autocomplete => 'on' %>
    </form>
  </div>
</div>

有人可以帮助我将其转换为有条件的吗?或者可能以其他方式在 text_field_tag 中找到 4 列

4

2 回答 2

2

你的代码有很多问题,SQL 注入,以及没有充分利用 Rails 清理方法来处理 SQL 查询的参数,你应该将参数指定为一个数组,让 Rails 为你做脏活。

像这样:

@projects = Project.where(%q[ lower(name) LIKE :keyword OR name2 LIKE :keyword], :keyword=>params[:query].downcase).all

我添加了额外的小写,因此搜索变得不区分大小写,好多了。

于 2013-08-28T16:23:21.867 回答
0

以 DevDude 的回答为基础,

在您的模型中:

def self.custom_conditions
where(%q[ lower(name) LIKE :keyword OR name2 LIKE :keyword],
:keyword=>params[:query].downcase).all
end

在您的控制器中:

@projects = Project.custom_conditions
于 2013-09-05T14:33:24.087 回答