использование searchlogic с ассоциациями habtm - PullRequest
0 голосов
/ 22 июня 2010

У меня следующая проблема:

В моем приложении rails есть два класса, к которым присоединяется ассоциация HABTM, например:

#ad.rb
has_and_belongs_to_many :specs
#spec.rb
has_and_belongs_to_many :ads

, к которым присоединяется таблица ads_specs.Я пытаюсь выполнить поиск по классу Ad, используя превосходный драгоценный камень searchlogic.Все шло нормально, пока я не хотел вернуть все объявления, которые имеют ВСЕ выбранные спецификации, а не какие-либо из них.

Я пытался @ads = Ad.specs_id_like_all(id1, id2, id3), но безрезультатно, так как я думаю, что он пытается сопоставить спецификацию сидентификатор "id1, id2, id3".Я также пытался разделить идентификаторы или напрямую ввести их в массив, но ничего не получилось.

Мой точный поисковый запрос:

if params[:search]
  @ads = Ad.search(:price_lte => params[:search][:price],
                   :rulaj_lte => params[:search][:rulaj],
                   :fabrication_date_gte => Date.new(params[:search][:"an_fabr(1i)"].to_i,"01".to_i,"01".to_i)).specs_id_like_all(2, 457, 233)

else
  @ads = Ad.all
end

У вас, ребята, есть идеи, как я могу решитьЭта проблема?Клянусь, это последний раз, когда я использую ассоциации HABTM в приложении rails, но уже так поздно переходить к полиморфному так поздно в процессе разработки:).

1 Ответ

0 голосов
/ 23 июня 2010

Если я правильно понимаю, вы пытаетесь выполнить запрос SQL IN () (т. Е. spec_id IN (x,y,z..))

Searchlogic поддерживает передачу массива в метод *_eq(), который будет использовать предикат IN () SQL:

Ad.search(:spec_id_eq => [1,2,3,4])

** Не уверен, работает ли это в более старых версиях Searchlogic *

...