2013-05-22 3 views
0

Как я могу предотвратить, что мой контроллер может ошибаться, когда запрос ActiveRecord не возвращает результат?Обработка результатов ActiveRecord - запись не найдена

ActiveRecord::RecordNotFound in PasswordResetsController#edit 
Couldn't find User with password_reset_token = rqZEGQUH54390Pg-AUC5Q 

Я думал, что "!" символ будет производить 404, но, по крайней мере, в разработке, он отображает трассировку ошибок в браузере.

Будет ли этот метод ниже производить 404 в производстве, если запрос ничего не возвращает?

Если нет, то как я могу исправить?

Благодаря

def edit 
     @user = user.find_by_password_reset_token!(params[:id]) 
    end 

ответ

2

С п rescue:

def edit 
    @user = user.find_by_password_reset_token!(params[:id]) 
rescue ActiveRecord::RecordNotFound => e 
    # Do something with error, 'e' 
end 

Или с rescue_from в контроллере (может быть повторно использован в нескольких действиях:

rescue_from ActiveRecord::RecordNotFound, with: lambda do |e| 
    # Do something with error, 'e' 
end 

def edit 
    @user = user.find_by_password_reset_token!(params[:id]) 
end 

В ответ на ваш другой вопрос, он даст ошибку HTTP 404 в производстве, но это wil l не показывать трассировку стека. По умолчанию он показывает очень основную страницу ошибок, в которой говорится, что что-то пошло не так.

+0

Совершенная. Спасибо, Jonathan – Slinky

+0

@Slinky никаких проблем. Не могли бы вы принять его в качестве ответа, если бы это помогло? –

+0

Я попытался принять, но должен был ждать 5 минут. Теперь все лучше. – Slinky

0

Try:

class PasswordResetsController 
    def edit 
    ... 
    begin 
     @user = user.find_by_password_reset_token!(params[:id]) 

    rescue ActiveRecord::RecordNotFound 
     redirect_to :controller => "{Your Controller}", :action => "{Your Action}" 
     return 
    end 
    end 
    end 
Смежные вопросы