0

Railsアプリでは、テーブル内のフィールドを介して検索する必要がありますが、主な問題は、そうしなければならないことです。ビューAでフィールドを選択することを選択した場合、A条件のみで検索する必要があります。AとBの両方の場合は、 AとB...今私は持っています:

コントローラ

@pre_oils = Oil.by_brand(params[:oilbrand]).by_oiloiliness(params[:oiloiliness]).by_structure(params[:oilstructure]).by_size(params[:oilsize])

モデル

def self.by_oiloiliness(oiloiliness)
    if oiloiliness
      where("description LIKE ?", "%#{oiloiliness}%")
    else
      scoped
    end
  end

  def self.by_brand(brand)
    if brand
      where("manufacturer LIKE ?", "%#{brand}%")
    else
      scoped
    end
  end

  def self.by_structure(structure)
    if structure
      #where("structure LIKE ?", "%#{structure}%")
      where("description LIKE ?", "%#{structure}%")
    else
      scoped
    end
  end

  def self.by_size(size)
    if size
      where("capacity LIKE ?", "#{size}")
    else
      scoped
    end
  end

しかし、それは非常に奇妙な検索を行っています。あるときは機能していて、別のときは機能していません。そして、そのようなフィールドだけで検索する方法は、ビューで選択されていますか?

(ルビー1.9.3レール3.2.8も)

たぶん、すべてのクエリで検索を使用してフェッチし、それらを分割して重複を削除するものはありますか?

upd

 oil = Oil.brand_like(params[:oilbrand])
    oil = Oil.description_like(params[:oiloiliness])
    oil = Oil.description_like(params[:oilstructure])
    oil = Oil.capacity_eq(params[:oilsize])

upd2

@pre_oils = Oil.search(:manufacturer_like => params [:oilbrand]、:description_like => params [:oiloiliness]、:description_like => params [:oilstructure]、:capacity_eq => params [:oilsize])

4

2 に答える 2

3

この種のもののために利用可能な多くの宝石があります。meta_searchsearchlogicなどのgemを調べて、検索を実行できます。

インストールするmeta_searchと、次のように実行できます。

form次のようなフィールドがある場合:

 <%= f.text_filed :capacity_eq %>
 <%= f.text_field :description_like %>

次のようなパラメータを取得します。

 params => {"description_like" => "xyz", "capacity_eq" => "21"}

 Oil.search(params)  #To get your results
于 2013-02-21T18:01:47.453 に答える
0

ActiveRecordを使用する

db抽象クラスを定義する

require 'active_record'
class MyDatabase < ActiveRecord::Base
  self.abstract_class = true
  establish_connection(
    #...
    :username => "",
    :password => "",
    :url => "")
end

テーブルモデルを定義する

require './my_database'
class Oil < MyDatabase
  self.table_name = 'oils'
end

その後、それを使用します

Oil.where('brand LIKE ? and oiloilness LIKE ?', params[:oilbrand], params[:oiloilness])
于 2013-02-21T18:01:18.217 に答える