proyectos ejemplos ruby-on-rails error-handling

ruby on rails - ejemplos - ¿Cómo detengo la ejecución del controlador después de usar redirect_to?(Usando Rails)



django (5)

Tengo un controlador con múltiples acciones que toman: año y mes como atributos de la URL. He hecho un método privado check_date para verificar que la fecha sea válida y verificar que la fecha no esté en el futuro.

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

¿Hay alguna manera de terminar la ejecución del controlador después del redirect_to?

Las formas en que puedo pensar son lanzar una excepción después del redirect_to o devolver un valor desde check_date y marcarlo en cada acción que lo llame, algo así como

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

Pero me pregunto si hay alguna manera agradable de hacer esto. Tenía la esperanza de que al haber llamado redirigir a los rieles reconocería que quería parar, pero eso no parece suceder.


Creo que OP está confundido acerca de la función de redirect_to .

redirect_to redirigirá al final de la acción. Sin embargo, el resto de la función del controlador se ejecutará como de costumbre. Todo lo que tienes que hacer (como lo publican otras personas) es incluir una devolución, como lo harías con cualquier otra función.


Probablemente quiera usar filtros.

Si llama a su check_date como un before_filter en el controlador, el hecho de que sea renderizado o redirigido evitará que el controlador llame al método de acción. Termina ahí y luego.


Puedes lanzar

return false

donde quiera que la ejecución del código en su acción se detenga


También puedes hacer:

return redirect_to :action => ''index''

y

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

ya que se ve mejor que poner el retorno en su propia línea (en mi humilde opinión).


redirect_to simplemente le dice a los rieles qué renderizar cuando termine. Rails se confundirá si agrega otras directivas render o redirect_to después de la que realmente desea, así que simplemente regrese desde el controlador después de la redirección_a - es la manera ''normal'' de hacer las cosas.