Ruby on rails 脱离控制器动作

Ruby on rails 脱离控制器动作,ruby-on-rails,ruby,ruby-on-rails-4,Ruby On Rails,Ruby,Ruby On Rails 4,我的问题是,是否有一个rails相当于“脱离”控制器操作,例如 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_rea

我的问题是,是否有一个rails相当于“脱离”控制器操作,例如

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\u filter


还有最后一个问题,在这样的定义(不一定是控制器操作,也有正常的定义)中,最好将所有内容都包含在“if else”语句中,还是像我在上面打算做的那样做?

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

正如您所提到的,您可以使用
before\u filter
s(在Rails 4中已重命名为
before\u action
),但我建议仅当控制器中的每个方法都需要该条件时才这样做。否则,你最终会看到一个巨大的列表,上面列出了行动之前的
s,你必须记住(或惊讶于),然后再阅读行动;如果你必须记住哪些适用于哪些不适用于哪些操作,那么它会变得特别混乱


是否更喜欢其他语句是一种观点。。。但是,受Avdi Grimm的优秀著作的启发,我建议你像在这里做的那样。。。您所设置的基本上是一个保护条款,在此条款中,您需要提前退出该方法,然后进入该方法的实际内容。在《自信的Ruby》中,Avdi Grimm谈到将方法分解为逻辑部分,以讲述一个连贯的故事,而不强迫读者在方法的整个生命周期中跟踪各种状态。使用if-else语句往往会迫使读者跟踪状态,而使用guard子句则可以让您快速识别离开方法的条件,然后忘记它们,这样您就可以专注于方法的实际用途。

谢谢,这正是我所需要的,而且信息非常丰富!