如何在使用redirect_to后停止控制器执行? (使用Rails)

我有一个控制器与多个行动,采取:年和:月作为来自URL的属性。 我已经做了一个私人的方法check_date来检查date是有效的,检查date是不是在未来。

def check_date(year, month) if month < 1 || month > 12 || year < 2000 flash[:notice] = I18n.t 'archive.invalid_date' redirect_to :action => 'index' elsif year > Date.today.year || (year == Date.today.year && month > Date.today.month) flash[:notice] = I18n.t 'archive.no_future' redirect_to :action => 'month_index', :year => Date.today.year, :month => Date.today.month, :type => params[:type] end end 

在redirect_to之后有没有一种结束控制器执行的方式?

我能想到的方式是在redirect_to之后抛出一个exception,或者从check_date返回一个值,并在每个调用它的操作中检查它 – 类似于

 def month_index year = params[:year].to_i month = params[:month].to_i if !check_date(year, month) return ... end 

但是我想知道是否有一些好的轨道方式来做到这一点。 我一半希望有redirect_to轨会认识到我想停止,但似乎并没有发生。

你可能想要使用filter。

如果您在控制器check_date作为before_filter调用,那么它将呈现或redirect的事实将阻止控制器调用操作方法。 它在那里结束然后。

你也可以这样做:

 return redirect_to :action => 'index' 

 return redirect_to :action => 'month_index', :year => Date.today.year, :month => Date.today.month, :type => params[:type] 

因为它看起来比把自己的线路(恕我直言)放在回报更好。

你可以扔进去

 return false 

无论你想在你的行动中的代码执行停止

redirect_to只是告诉轨道什么时候完成呈现。 如果你在你真正想要的之后添加其他的render或者redirect_to指令,Rails会感到困惑,所以在redirect_to之后从控制器中返回 – 这是'正常'的rails办法。

我觉得OP对redirect_to的function感到困惑。

redirect_to将在动作结束时redirect。 但是,其余的控制器function将照常执行。 您所要做的(由其他人发布的)就是包含一个返回值,就像您应该调用其他任何函数一样。