0

3.5 および ruby​​ 1.8.7 4 つの列 (name,name2,last_name,last_name2) で動作する複数検索を作成しようとしています。テキスト ボックスで 4 つの列を検索したいのですが、24 の条件を作成したくありません。これを行う他の方法はありますか、または24条件の代わりに条件付きFORを作成する可能性があります

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 インジェクション、SQL クエリのパラメーターの Rails クリーニング メソッドを十分に活用していない場合は、params を配列として指定し、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 に答える