работа со спасением в направляющих

Я работаю со следующей частью;

def index
  @user = User.find(params[:id]) 
  rescue
    flash[:notice] = "ERROR"
    redirect_to(:action => 'index')
  else 
    flash[:notice] = "OK"
    redirect_to(:action => 'index')
end

Теперь я или случай, есть ли у меня корректный идентификатор или нет, я всегда получаю "хорошо", по моему мнению, что я делаю неправильно?

Мне нужно это, когда у меня нет идентификатора в DB для показа "ОШИБКИ". Я также попытался использовать rescue ActiveRecord::RecordNotFound но то же происходит.

Вся справка ценится.

12
задан Adnan 2 April 2010 в 14:28
поделиться

2 ответа

Весь код после конца блока спасения интерпретируется, только если в блоке спасения нет возвратов. Поэтому вы можете вызвать return в конце блока спасения.

def index
  begin
    @user = User.find(params[:id]) 
  rescue
    flash[:notice] = "ERROR"
    redirect_to(:action => 'index')
    return
  end
  flash[:notice] = "OK"
  redirect_to(:action => 'index')
end

или

def index
  @user = User.find(params[:id]) 
  # after is interpret only if no exception before
  flash[:notice] = "OK"
  redirect_to(:action => 'index')
rescue
  flash[:notice] = "ERROR"
  redirect_to(:action => 'index')
end

Но в вашем случае лучше использовать rescue_from или rescue_in_public

например

class UserController < ApplicationController
  def rescue_in_public(exception)
    flash[:notice] = "ERROR"
    redirect_to(:action => 'index')
  end

  def index
    @user = User.find(params[:id]) 
    flash[:notice] = "OK"
    redirect_to(:action => 'index')
  end
end

Но использование rescue_in_public не совсем хороший совет

33
ответ дан 2 December 2019 в 04:42
поделиться

Если нет пользователя с этим идентификатором , то User.find вернет nil . Возврат nil не является случаем ошибки и не запускает спасательную операцию .

-5
ответ дан 2 December 2019 в 04:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: