代码之家  ›  专栏  ›  技术社区  ›  Hamish Downer JKP

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

  •  48
  • Hamish Downer JKP  · 技术社区  · 16 年前

    我有一个控制器,它有多个动作,分别为:年和:月

    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
    

    在执行完以下操作后,是否有结束控制器执行的轨道方式

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

    希望调用redirect_to-rails后能认出我想

    5 回复  |  直到 16 年前
        1
  •  50
  •   Slipp D. Thompson Jon Brooks    14 年前

    您还可以执行以下操作:

    return redirect_to :action => 'index'
    

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

    因为它看起来比把回报放在自己的线上要好(依我之见)。

        2
  •  36
  •   kch    16 年前

    如果你打电话给你的 check_date 作为 before_filter 在控制器中,它呈现或重定向的事实将阻止控制器调用action方法。事情到此为止。

        3
  •  16
  •   vrish88    16 年前

    你可以扔进去

    return false
    

    无论你想在哪里停止操作中的代码执行

        4
  •  7
  •   Sniggerfardimungus    16 年前

    redirect_to只是告诉rails当它完成时渲染什么。如果你在真正想要的指令之后添加其他render或redirect_to指令,Rails会感到困惑,所以只需在redirect_to-之后从控制器返回——这是Rails的“正常”做事方式。

        5
  •  2
  •   Tristan Tao    9 年前

    我认为OP对以下功能感到困惑 redirect_to .

    redirect_to 将在操作结束时重定向。但是,控制器功能的其余部分将照常执行。你所要做的(正如其他人发布的那样)就是包含一个return,就像你应该调用任何其他函数一样。