Рубиновый поиск по нескольким полям

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)

возможно, что-то с помощью поиска по всем запросам, а затем разделить их и удалить дубликаты?

обн

 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 [: oilize])

  • 0
    where("capacity LIKE ?", "#{size}") - нет % . Почему?
  • 0
    @ jdoe это не проблема .... это должно быть так

2 ответа

3
Лучший ответ

Для таких вещей есть много драгоценных камней. Вы можете пройти через драгоценные камни, такие как meta_search, searchlogic, чтобы выполнить поиск.

После установки 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
  • 0
    а как добавить все поиски в один var? также, как использовать там% как%
  • 0
    Вам нужно name поля представления так: для выполнения операции like name поля должно быть description_like , для точного совпадения имя поля должно быть capacity_eq и так далее. Вы идете через Gem Doc. Вы узнаете вещи.
Показать ещё 14 комментариев
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])
  • 0
    неопределенный метод `find_all_by_brand_and_oiloiliness_and_structure_and_size '
  • 0
    Он предлагал вам написать метод find_all_by_brand_and_oiloiliness_and_structure_and_size
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню