validates_presence_of w kontrolerze?

Witam,
Mam taki problem: używam plaginu acts_as_authenticated do logowania, ale chciałbym aby wyświetlał on jakieś komunikaty w przypadku nieudanego logowania. W tej chwili metoda logowania (account_controller.rb) wygląda tak:

def login return unless request.post? self.current_user = User.authenticate(params[:login], params[:password]) if logged_in? if params[:remember_me] == "1" self.current_user.remember_me cookies[:auth_token] = { :value => self.current_user.remember_token , :expires => self.current_user.remember_token_expires_at } end redirect_back_or_default(:controller => '/account', :action => 'index') flash[:notice] = "Logged in successfully" end end
Jak użyć czegloś 'ala validates_presence_of w kontrolerze?

if logged_in? #to co do tej pory else flash[:error] = 'Zły login lub hasło' render :action => 'nazwa_akcji_wyświetlającej_formularz_logowania' end

Też o tym myślałem, ale nie może wyświetlać się komunikat o błędzie w przypadku kiedy nie podjęto nawet próby logowania. Jeżeli już to będzie elsif request.post?

Jeśli Twoja akcja “login” służy tylko do zalogowania użytkownika to zakładam że poprawną metodą dla niej jest tylko i wyłącznie POST. Zatem pomocna będzie metoda verify (http://api.rubyonrails.org/classes/ActionController/Verification/ClassMethods.html#M000175).
W kontrolerze na początku dodajesz mniej więcej coś takiego:

verify :method => :post, :only => [:login], :redirect_to => { :controller => "index", :action => "not_found" }

Ew. zrób sobie else do warunku request.post? i zrób w nim wyświetlanie formularza z logowaniem. Jak tylko chcesz.

btw, do moderatorów forum. Następująca regułka w css forum powoduje, że nie widać całego kodu źródłowego przy długich linijkach (base.css line 189):

div.incqbox overflow:hidden; width:100%; }

Dzięki. To jeż jest jakaś metoda. Spróbujemy :slight_smile:

Powinny być dwie niezależne metody np. o takich nazwach:

  • new - trywialna, pokazuje formularz logowania, reaguje na GET
  • create - ten kod, co pokazałeś z poprawkami Radarka (“else” + verify)

Sytuacja, w której musisz w dowolnej metodzie kontrolera sprawdzać ręcznie typ żądania (GET/POST) jest nienaturalna. To powinno być realizowane deklaratywnie w routes.rb. Na marginesie, we wtyczce restful_authentication jest to już zrobione za Ciebie.