搜索text_field_tag中的多个列

时间:2013-08-28 15:29:08

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

3.5和红宝石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列的其他方法

2 个答案:

答案 0 :(得分:2)

您的代码,SQL注入以及没有充分利用Rails清理方法来解决SQL查询参数的许多问题,您应该将params指定为数组并让Rails为您执行脏工作。

像这样:

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

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

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