В моем приложении 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])
Для таких вещей есть много драгоценных камней. Вы можете пройти через драгоценные камни, такие как 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
name
поля представления так: для выполнения операции like
name
поля должно быть description_like
, для точного совпадения имя поля должно быть capacity_eq
и так далее. Вы идете через Gem Doc. Вы узнаете вещи.
Использовать 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])
where("capacity LIKE ?", "#{size}")
- нет%
. Почему?