Заставить динамический искатель Rails 3 генерировать исключение RecordNotFound? - PullRequest
8 голосов
/ 23 февраля 2011

Возможно ли заставить динамический искатель Rails генерировать исключение ActiveRecord::RecordNotFound вместо возврата nil, когда он не может найти результат?

Например, если напиток с названием «Nuka-Cola» не существует:

@not_found = Beverage.find_by_name('Nuka–Cola')

Вместо того, чтобы

@not_found == nil

Может ли

.find_by_name('Nuka–Cola')

вызов метода вызывает исключение ActiveRecord::RecordNotFound?

Или мне придется проверить nil и сгенерировать исключение вручную?

Ответы [ 2 ]

21 голосов
/ 23 февраля 2011

Используйте версию взрыва.

@not_found = Beverage.find_by_name!('Nuka–Cola')
0 голосов
/ 25 мая 2011

Большое спасибо, облик

Будет более полезно, если вы работаете над некоторыми материалами REST API. вместо отображения страницы исключений html представьте содержательный JSON или XML.

class ApiController < ApplicationController
 rescue_from ActiveRecord::RecordNotFound, :with => :not_found

  def not_found(exception = nil)
    render :json => { :message => exception.message, :request => request.fullpath }, 
                      :status => 404
  end
end    
...