2010-11-23 124 views
0

軌道是否有斷言?Rails - Break語句?

我在寫一個控制器,它有一些非常複雜的IF語句。總之,我想要做的是這樣的:

如果!所有這些變量存在,不是零? BREAK,並且不要繼續BEC出事了 END

如果XXX =「adsasd 做這一切的東西 ELSE IF

ELSE 發出一個錯誤的電子郵件

是一個打破可能嗎?

+0

@Alex呈現與返回不同,並且不會退出當前方法。 – 2010-11-23 02:45:52

回答

3

我不知道什麼時候所有變量都可用,但是當我想在控制器中執行檢查時,我通常會使用before_filter回調來執行此操作。例如:

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 

這裏做的事情是,當一個請求到達動作展現在YourController,它首先會調用私有方法check_if_variables_exist。如果@your_variable是零而不是結束於render:nothing => true並且filter_chain將被暫停,並且動作顯示將永遠不會被調用。但是,如果your_variable不是零,那麼該方法將不做任何事情而結束,然後控制器將像往常一樣調用動作表演。

因此,您希望事先檢查的所有內容都可以放在不同的before_filter回調函數中。如果你不想在控制器的所有動作的檢查,可以這樣規定:

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

在我看來,這是「鐵軌」的方式來做到這一點。

+0

這是一個非常乾淨的主意!我真的很喜歡那樣。謝謝 – AnApprentice 2010-11-23 04:52:22

1

Ruby的return聲明是您正在尋找的。然而...

我正在寫有一些很複雜的IF語句

不知道什麼對你的應用程序,這是一個BIG紅旗的控制器。控制器不是擁有一堆複雜邏輯的地方。如果您使用的是RESTful設計模式(並且很少有其他原因),那麼您的控制器應該非常輕量級,並且幾乎不包含任何邏輯。模型是您的業務邏輯所屬的地方。它們允許您分離邏輯,簡化應用程序並使其更易於測試。