[RoR] Logikproblem

Stex

Zeta Sagittarii
ID: 54415
L
11 Mai 2006
937
185
Hi,

es geht zwar um ein Beispiel in Ruby on Rails, aber es ist eigentlich ein Logikproblem, mit dem ich mich im Moment rumschlage:

Der Code

PHP:
def openid_login
    if !params[:openid].blank? || !params[:open_id_complete].blank?
      user = open_id_authentication params[:openid]
      unless user.nil?
        session[:user_id] = user.id
        session[:permission_cache] ||= Hash.new
        session[:projects_links] = get_projects
        redirect_back_or_default('/session')
       else
        redirect_to :action => "new" and return
       end
    else
      redirect_to(:action => "new") and return
    end
      
  end
Wenn die Funktion das erste Mal aufgerufen wird (also direkt nach dem Abschicken des Formulars) ist der parameter "open_id_complete" immer nil, der user auch (das läuft leider über die Funktion zur Authentication so).

Wenn der User existiert (= OpenID korrekt und in Datenbank) wird das ganze nochmal mit dem parameter "open_id_complete"=1 aufgerufen (auch durch die OpenID-Funktion), ansonsten bleibt es bei nil und er geht raus.

Mein Problem ist, dass - wenn user <> nil ist - zweimal ein redirect ausgeführt wird (was rails nicht erlaubt) und ich sehe einfach nicht, warum :-?

Ist vermutlich nur ein dummer Fehler, aber ich find's nicht.

Vielen Dank schonmal im Voraus!
 
Wieso schreibst Du das ganze nicht so:
PHP:
def openid_login
    unless params[:open_id_complete].nil?
        redirect_to(:action => 'new')
    end

    if !params[:openid].nil?
        user = open_id_authentication params[:openid]
        unless user.nil?
            session[:user_id] = user.id
            session[:permission_cache] ||= Hash.new
            session[:projects_links] = get_projects
            redirect_back_or_default('/session')
        else
            redirect_to (:action => 'new') and return
       end
  end

Würde ich sagen ginge auch so und ist für meine Begriffe Übersichtlicher. Ich garantiere aber für nichts^^, habe schon lang nix mehr gesagt.

Btw wofür steht das 'and return' hinter dem redirect_to, dass ist mir gäntzlich unbekannt.