Reb*_*rth 2 ruby ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)
这也提出了一个问题,如果我做错了什么,而不应该用 before_filter
还有最后一个问题,是将所有内容都包含在此类定义中的“if-else”语句中(不一定是控制器操作,也可以是普通定义),还是像我打算在那里做的那样做 ^?
答案是使用return. 控制器操作只是方法,return是您从方法中提前返回的方式。这样做并没有错,您应该可以根据需要随意这样做。
正如您所提到的,您可以使用before_filters(before_action在 Rails 4 中已重命名为),但我建议仅在控制器中的每个方法都需要条件时才这样做。否则,您最终会before_action在顶部看到一个巨大的s列表,您在稍后阅读操作时必须牢记(或感到惊讶);如果您必须记住哪些适用,哪些不适用于哪些操作,就会变得特别混乱!
是否更喜欢 if-else 语句是一种意见......但是,受到 Avdi Grimm 的优秀书籍Confident Ruby 的启发,我建议按照你在这里所做的那样做......你所设置的本质上是一个保护子句,您可以提前退出该方法,然后进入该方法的实际内容。在Confident Ruby 中,Avdi Grimm 谈到将方法分解为逻辑部分以讲述一个连贯的故事,而不会强迫读者在方法的整个生命周期中跟踪各种状态。使用 if-else 语句往往会迫使读者跟踪状态,而使用保护子句可以让您快速识别离开方法的条件,然后忘记它们,以便您可以专注于方法的实际目的。