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列的其他方法
答案 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