Как избежать множественного redirect_to при вызове внутри метода - PullRequest
1 голос
/ 28 января 2012

У меня есть небольшая проблема с рельсами, я хочу иметь возможность сделать что-то подобное, чтобы избежать многократных перенаправлений:

def render_not_found
  not_found
end

private

  def not_found
    redirect_to website_url(@website), :status => 301 and return return
  end

return return не работает, конечно!

Использование: рельсы 3.2.0

Ответы [ 2 ]

3 голосов
/ 28 января 2012

Есть несколько способов сделать это.Один из способов - определить и вызвать пользовательскую ошибку и иметь обработчик, который перенаправляет при этом.

application_controller.rb

Class ApplicationController < ActionController::Base

  around_filter :catch_errors

  def catch_errors
    yield
  rescue SiteNotFoundError
    redirect_to website_url(@website), :status => 301
  rescue ActiveRecord::RecordNotFound
    render 404
  rescue ...
    ...
    ...
  end
end

class SiteNotFoundError < StandardError; end

в контроллере

def your_action
  raise SiteNotFoundError if (some condition)
end

или перед фильтром

before_filter :ensure_valid_site

def ensure_valid_site
  raise SiteNotFoundError if ....
end
0 голосов
/ 28 января 2012

Я обычно помещаю свои перенаправления на ошибки в before_filters.

Но если вы действительно хотите это сделать, вы можете сделать это так ... но я предупреждаю вас, это не красиво.1003 *

def render_not_found
  not_found(binding)
end

private

def not_found(b)
  redirect_to website_url(@website), :status => 301
  b.eval('return')
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...