0

次の検索方法があります。

 def search(search = nil, field_search1,field_search2, field_search3,field_search4,field_search5)
      if search
        where("#{field_search1} LIKE ? OR #{field_search2} LIKE ? OR #{field_search3} LIKE ? OR #{field_search4} LIKE ? OR #{field_search5}LIKE ?", "%#{search}%", "%#{search}%","%#{search}%", "%#{search}%","%#{search}%")
      else
        where(nil)
      end
    end

それは機能しますが、非常に醜いです。オプションハッシュでフィールド名を渡すようにリファクタリングしようとしています。次のようなことを行うことによって:

def search(search= nil, options={})
  options.each do |option|
    #Run the query inside here 
end

オプションをループして、選択したオプションがそれに一致するクエリを実行し、オプションハッシュが最後に達したらORLIKE ? OR

4

1 に答える 1

0

これはうまくいくはずです:

def search(search = nil, fields)
  query_string = fields.join(' LIKE :search OR ') + ' LIKE :search'
  (search) ? where(query_string, search: search) : where(nil)
end

ただし、検索クエリなしでメソッドを実行することはできません。また、全文検索も調べてください: http://robots.thoughtbot.com/post/58438017998/implementing-multi-table-full-text-search-with-postgres

于 2013-10-24T15:07:04.020 に答える