2010-11-23 9 views
0

Hat Schienen eine Break-Anweisung?Schienen - Break Statement?

Ich schreibe einen Controller, der einige ziemlich komplizierte IF-Anweisungen hat. In Sum möchte ich folgendes tun:

IF! Alle diese Variablen existieren und sind nicht Null? BREAK und nicht weiter bec etwas schief gelaufen ist END

Wenn XXX ‚= adsasd all dieses Zeug tun ELSE IF

ELSE E-Mail einen Fehler auszusenden

Ist eine Pause möglich?

+0

@Alex Render ist nicht dasselbe wie Rückgabe und beendet die aktuelle Methode nicht. –

Antwort

3

Ich weiß nicht, wann alle Ihre Variablen verfügbar werden, aber wenn ich im Controller Kontrollen machen möchte, verwende ich normalerweise die Callbacks von vorher_filter, um das zu tun. Zum Beispiel:

class YourController 
    before_filter :check_if_variables_exist 

    def show 
    #prepare for render view 
    end 

private 
    def check_if_variables_exist 
    unless @your_variable.nil? 
     #Do what you want 
     render :nothing => true 
    end 
    end 

Was das bedeutet ist, dass, wenn eine Anfrage in YourController zum Handeln Show kommt, wird es zuerst die private Methode check_if_variables_exist nennen. Wenn @your_variable null ist, wird es bei render enden: nothing => true und die filter_chain wird angehalten und die action show wird nie aufgerufen. Wenn jedoch Ihre_Variable nicht null ist, endet die Methode ohne etwas zu tun und der Controller ruft dann wie üblich die Aktionsshow auf.

So können alle Dinge, die Sie im Voraus überprüfen möchten, in verschiedenen vor_filter Callbacks platziert werden. Und wenn Sie nicht für alle Aktionen im Controller die überprüfen mögen, kann es wie folgt angegeben werden:

class YourController 
    before_filter :first_check, :only => [:index, :show] 
    before_filter :second_check, :only => [:show, :edit] 

Meiner Meinung nach ist dies der „Schienen“ Weg ist, es zu tun.

+0

Das ist eine tolle, saubere Idee !!! Das gefällt mir sehr. Danke – AnApprentice

1

Rubys return Anweisung ist, was Sie suchen. Allerdings ...

Ich schreibe ein Controller, der einige ziemlich komplizierte IF-Anweisungen

Ohne zu wissen, noch etwas über Ihre Anwendung hat, ist dies ein BIG rote Fahne. Controller sind nicht der Ort, um eine Menge komplizierter Logik zu haben. Wenn Sie RESTful-Entwurfsmuster verwenden (und es gibt selten einen Grund, dies nicht zu tun), sollten Ihre Controller sehr leicht sein und fast keine Logik enthalten. Modelle gehören zu Ihrer Geschäftslogik. Sie ermöglichen es Ihnen, Logik zu isolieren, Ihre Anwendung zu vereinfachen und den Test zu vereinfachen.