просто задаюсь вопросом, как лучше справиться со следующим, поскольку в Интернете, похоже, есть противоречивая информация об этом.Мой код начал жизнь, как это ..
@merchant = Merchant.find_by_name(params[:merchant])
@products = @merchant.products.all.paginate(:page => params[:page])
Теперь это прекрасно работает, пока вы не нажмете на URL, где не будет торговца, т.е. /merchants/thisonedontexist/
, и в этот момент я получаю следующую ошибку:
`undefined method `products' for nil:NilClass`
Я понимаю, почему я получаю эту ошибку.
Итак, после небольшого исследования, я решил изменить свой код на следующий с BANG (!), Что вызывает ошибку NoRecordFoundтак что он никогда не попадает в следующую строку, проблема в том, что теперь я получаю ужасную ошибку:
@merchant = Merchant.find_by_name!(params[:merchant])
@products = @merchant.products.all.paginate(:page => params[:page])
Ошибка: ActiveRecord::RecordNotFound
Так что после более подробного исследования я сделал следующееи перенаправил эти запросы на 404 ...
def show
@merchant = Merchant.find_by_name(params[:merchant])
if !@merchant.nil?
@products = @merchant.products.all.paginate(:page => params[:page])
else
redirect_to :status => 404
end
end
, который, кажется, работает, но кажется очень неуклюжим ... Какова лучшая практика здесь?
Я бы хотел за этопросто чтобы показать страницу с "Sorry no category exists"
.
ps. Я новичок в Rails, может быть, на этот вопрос есть действительно очевидный ответ n00b