[meta_search] pomocy z layoutem

Hej wszystkim,

mam wyszukiwarkę korzystając z ‘meta_search’

application.html.erb

[code]…

<%= form_for @search do |f| %>

<%= f.text_field :name_contains, :required => true %>

<%= f.submit "Szukaj" %>

<% end %>

…[/code]
application_helper.rb

def find_search @search = Offer.search(params[:search]) end
application_controler.rb

  before_filter :find_search, :only => [:index, :show, :edit, :new]

Wyszukiwarka ładnie znajduje wyniki. Pojawił się problem jak dorzuciłem devise
Mianowicie przy rejestracji nowego użytkownika (jeśli są wszystkie pola wypełnione i spełnione są warunki np. z automatu hasło musi mieć 8 znaków etc. ) to wszystko ładnie działa. Jeżeli pozostawię puste pola wywala mi błąd:
NoMethodError in Devise/registrations#create, undefined method `model_name’ for NilClass:Class.
Jak usunę wyszukiwarkę to ładnie pokazuje mi błędy.

Jak to rozwiązać ?
Jeśli miałbym dostęp do kontrolera registrations, to w akcji create pewnie dodanie @search = Offer.search(params[:search]) rozwiązałoby problem.
Jak wiadomo kontroler ten jest niedostępny, a nadpisywanie nie jest polecane przez programistów. Poza tym takim podejściem musiałbym dorzucać tą linię prawie w każdym kontrolerze.

Jak więc rozwiązać ten problem ?

Mógłbym wyszukiwanie przerzucić do kontrolera Offers, ale jak korzystać później z tego w layout’cie application ?

Proszę o pomoc, bo za dużo pewnie kombinuję.

Wydaje mi się, że powinieneś find_search dać w kontrolerze Offer, następnie sam formularz wrzucić do layoutu i go później renderować w application.rb z tym, że

<%= form_for @search do |f| %>

zastąp czymś takim

<%= form_for find_search do |f| %>

Pisane z palca. Teraz powinno działać

Ps. before filter możesz wywalić; )

Miałem tak:

application.rb

.. <% render :partial => 'find' %> </code] działało (wyświetlało wyniki - błędu) tylko dla kolumny offers. Przechodząc do innej kolumny np. kontakt wywalało błąd, że nie ma takiego partiala, pomimo, że miałem w tym partialu tak jak mówiłeś [ode] <%= form_for @search, url => { :controller => 'offers', :action => 'find_search' } do |f| %>
.

Nadpisując metodę create w devise tzn dopisując linie

@search = Offer.search(params[:search]) ...
dostaję to co chciałem uzyskać tj. przy braku wypełnionych pół

Sign up 3 errors prohibited this user from being saved: Email can't be blank Password can't be blank Password can't be blank
przy braku nadpisania metody miałem

NoMethodError in Devise/registrations#create .. undefined method `model_name' for NilClass:Class
Uzyskany efekt jest, ale jak powinienem to zrobić, aby było dobrze ?
Przecież głupotą będzie dodawać w każdym kontrolerze ciągle @search = …

Nie wiem co na to puryści, ale ja bym to zrobił tak:

helpers/search_helper.rb

module SearchHelper def prepare_search @search || Search.new # plus dodatkowe parametry inicjalizacji jesli potrzebne end
partial

  <%= form_for prepare_search, url => { :controller => 'offers', :action => 'find_search' } do |f| %>