Searchlogic vs. acts_as_taggable

Jak w tytule. Udało się komuś pogodzić Binarylogic’s Searchlogic z Acts_as_taggable_on_steroids, konkretnie z metodą find_tagged_with? Chodzi mi oczywiście o eleganckie uwzględnienie taga, według którego [także] ma być szukanie, jeśli w ogóle mamy tag_id w paramsach.

Jeśli tak, to w jaki sposób?

OK, gdyby ktoś był zainteresowany jak pożenić acts_as_taggable_on_steroids z warunkami wyszukiwania wygenerowanymi przez searchlogic i RESTowymi ścieżkami zarazem - konkretnie do znalezienia obiektów według podanych warunków i opcjonalnie z danym tagiem (przekazanym w ścieżce jako :tag_id).

[code]
@sort_by = params[:sort_by] || “created_at”

@search = Something.new_search(
:conditions => {
:user_id => (params[:user_id] || current_user),
(… inne warunki…)
:tags => ({:id => params[:tag_id]} if params[:tag_id])
},
:order_by => @sort)

#JOIN wyciagniety z AATOS
@somethings = @search.find(:all, :joins => “INNER JOIN taggings somethings_taggings
ON somethings.taggable_id = somethings.id
AND somethings.taggable_type = ‘Something’
INNER JOIN tags somethings_tags
ON somethings_tags.id = somethings_taggings.tag_id”)[/code]
Jest to hack niestety, wynikający z “kompleksowości” generowanego przez AATOS SQLa. W każdym razie działa jak trzeba.

To, za co kocham searchlogic, to nieuwzględnianie w budowaniu SQLa danego parametru jeśli wartość przekazana jest nil. Rewelacja. Głównie dlatego go używam. No, może jeszcze do escape’owania parametrów tekstowych :wink:

Przerzucamy do Tips & Tricks, panowie moderatorzy?

Masz może metodę na wyszukanie dla taga - taggings w jakim został użyty (to proste) plus stronicowanie tego (tu leżę)? To znaczy, zeby w ‘show’ taga wyrzucic liste wszystkich miejsce w jakich został użyty (w kilku modelach) i stronicowanie tego.

Co do stronicowania, to zobacz co napisałem w “Tips & Tricks” o łączeniu searchlogic z mislav-will_paginate.