2016-05-04 21 views
0

私は3つのテーブルからのフィールドを持つフォームを持っています。ユーザーはフィールドを入力して検索することができます。rails where multiple table in query

たとえば、私はこれらのテーブルと列

車があります。

  • rego_num
  • モデル
  • VIN
  • engine_num
  • トランス作りますミッション、...

お客様:

  • EMAIL_ADDRESS

住所:

  • アドレス1
  • アドレス2
  • アドレス3
  • 電話
  • work_num
  • primary_num
  • ファックス
Vehicle belongs_to Customer 
Customer has_one address 

ユーザーは、彼らができるEXのために、上記のいずれかのフィールドで検索を行うことができます単独でレゴを入力し、makeとモデルまたは名前を単独またはpホーン、

彼らは部分的な電話番号を入力することができますし、それは見つける必要があります、電話は整数列です。

車両が存在して、顧客を見つけることが、問題は、彼らだけでは、顧客のフィールドを入力することができている場合、私は、車の列を見つけることを考えました。

は私が参加し書くことができると思うと

vehicle.joins(:customer) 

のように、どこのクエリを実行しますが、アドレスが車両に関連して、誰でもこの方法を検索し、レコードを検索するクエリを記述するためのparamsを送信するためにどのように私をお勧めできます

私はそれが複数の列に対して検索するキーワードを1つ持っていますが、私は特定の列に対して検索するために、複数の値を持つpg_search宝石をチェックします。

+0

おそらく、この宝石は役に立ちます:https://github.com/activerecord-hackery/ransackモデルとその関連付けを簡単に検索することができます。一度にすべての属性を1つのフォームフィールドで検索することができます。 – luizrogeriocn

答えて

0

あなたはパラメータを送信するために、AJAX呼び出しを使用することができ、コントローラには、SQLでクエリを作成する必要があります。

例:

はすべてloacal変数にparamsは取得したり、あなたが直接使用することができます。

reg_no = params[:reg_no] 
make = params[:make] 
query = 'where ' 

if reg_no.present? 
query = query+ "reg_no ilike #{reg_no} AND " 
if make.present? 
query = query + "make ilike #{make} AND " 

「=」を使用すると、「ilike」の部分的な使用の場合、ユーザーは「文字列全体」を入力します。

ここで、joinを使用してwhere条件を使用できます。