脱离控制器动作

时间:2014-08-23 15:34:25

标签: ruby-on-rails ruby ruby-on-rails-4

我的问题是,是否存在相当于“打破”控制器动作的轨道,例如

def new
    if some_confirmation
        do_stuff
        break #I know this only breaks out of a loop but I want it to break out of the action. is this possible?
    end
    do_some_other_stuff_which_it_should_not_reach_after_breaking
end

这也提出了一个问题,如果我做错了什么,不应该用before_filter

来做

最后一个问题,最好将所有内容都包含在这些定义中的'if-else'语句中(不一定是控制器操作,还包括常规定义),还是像我打算在那里做的那样^?< / p>

1 个答案:

答案 0 :(得分:4)

答案是使用return。控制器操作只是方法,而return是您从方法中提前返回的方式。这样做并没有错,你可以根据需要自由地做。

如您所述,您可以使用before_filter(已在Rails 4中重命名为before_action),但我建议仅在控制器中的每个方法都需要条件时才执行此操作。否则,你最终会在顶部找到一个巨大的before_action列表,你必须在以后阅读这些行动时记住(或惊讶);如果你必须记住哪些适用哪些以及哪些不适用于哪些行为,那就特别令人困惑!

是否首选if-else语句有点意见......但是,受到Avdi Grimm优秀书籍Confident Ruby的启发,我建议你像在这里做的那样做......你是什么人设置本质上是一个保护条款,你可以提前预先退出方法,然后你进入方法的实际内容。在自信的Ruby 中,Avdi Grimm谈到将方法分解为逻辑部分,以讲述一个连贯的故事,这个故事不会强迫读者在方法的整个生命周期中跟踪各种状态。使用if-else语句会强制读者跟踪状态,而使用guard子句可以让您快速识别离开方法的条件,然后忘记它们,这样您就可以专注于方法的实际目的。