Searchlogic again

Postanowiłem i tym się zainteresować i o ile wyszukiwanie model/index jest super, to @model.cos/show już mi nie idzie i sam nie wiem czy searchlogic nadaje się do tego. O co mi chodzi? Mianowicie mam sobie model Topic i chcę w jego show mieć wyszukiwarkę dla postów:

def show
@topic = Topic.find(params[:id])
@search = @topic.posts.new_search(params[:search])
@posts, @posts_count = @search.all, @search.count
end

Coś takiego zrobić za pomocą searchlogic. Oczywiście to powyżej nie działa, searchlogic odsyła w tym momencie do modelu Post i jego akcji index.

Post.new_search(params[:search].merge({:topic_id_equals => @topic.id}))

na przykład?

Dzięki za pomoc. Niestety chyba coś robię źle.

def show
@topic = Topic.find(params[:id])
@search = Post.new_search(params[:search].merge({:topic_id_equals => @topic.id}))
@posts, @posts_count = @search.all, @search.count
end

dostaje error:

NoMethodError in TopicsController#show

You have a nil object when you didn’t expect it!
The error occurred while evaluating nil.merge

Dobrze użyłem tej metody?

Jeśli dobrze zrozumiałem to chodzi ci o formularz wyszukiwania.

Musisz podać konkretnie url akcji która ma zostać wykonana, czyli jak masz formularz wyszukiwania:

form_for @search
zostanie wykonana akcja index modelu Post czyli posts_url, bo @search odnosi się do tego modelu.

Aby to działało użyj:

form_for @search, :url => topics_url

Co do kodu Tomasha to aby działał przy akcjach typu GET zmień

@search = Post.new_search(params[:search].merge({:topic_id_equals => @topic.id}))

na

params[:search] ||= { :conditions => {} }
@search = Post.new_search(params[:search][:conditions].merge({:topic_id_equals => @topic.id}))

Dzięki za pomoc. Pomogło użycie :url, wystarczyło dodać :url => @topic i śmiaga :))