2010-11-23 129 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设计模式(并且很少有其他原因),那么您的控制器应该非常轻量级,并且几乎不包含任何逻辑。模型是您的业务逻辑所属的地方。它们允许您分离逻辑,简化应用程序并使其更易于测试。