функция спасения рельсов - PullRequest
0 голосов
/ 21 октября 2011

У меня есть контроллер продуктов на моем сайте, и я решил использовать команду rescue в rails, чтобы люди не могли войти в products / 500 и получить сообщение об ошибке rails для продукта, который не существует.,Вот как выглядит мой код

def show
  @product = Product.find(params[:id])
  @title = @product.name
rescue ActiveRecord::RecordNotFound
  redirect_to root_path, :notice => 'No such product'
end

, но потом я увидел другие места, где люди используют begin rescue и else.это код ниже лучшей практики.это работает в обе стороны, но я хотел бы знать, в чем разница между этими двумя кодами

def show
  begin
    @product = Product.find(params[:id])
  rescue ActiveRecord::RecordNotFound
    redirect_to root_path, :notice => 'No such product'
  else
    @title = @product.name
  end
end

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Причина, по которой вы хотите использовать метод begin / rescue / else (и необязательный контроль), заключается в том, что вы собираетесь потом что-то делать. В вашем случае первый из ваших примеров предпочтительнее. Он объединяет логику «счастливого случая», на которой вы, скорее всего, захотите сосредоточиться, но все же не дает понять, что произойдет в случае сбоя.

0 голосов
/ 21 октября 2011

Кто-то изолирует то, что вызывает исключение, кто-то нет.

Не совсем уверен, является ли он «лучшей практикой» или нет;Мне нравится держать «вещи, которые могут пойти ужасно неправильно» изолированно, но я считаю, что begin / rescue / else непросто при чтении, потому что я должен «пропустить вперед», чтобы посмотреть, что произойдет, если не исключение.Не много, но ме.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...