HTTP 404 Статус
Чтобы вернуть заголовок 404, просто используйте параметр :status
для метода рендеринга.
def action
# here the code
render :status => 404
end
Если вы хотите отобразить стандартную страницу 404, вы можете извлечь эту функцию в методе.
def render_404
respond_to do |format|
format.html { render :file => "#{Rails.root}/public/404", :layout => false, :status => :not_found }
format.xml { head :not_found }
format.any { head :not_found }
end
end
и назовите это в своем действии
def action
# here the code
render_404
end
Если вы хотите, чтобы действие отображало страницу с ошибкой и останавливалось, просто используйте оператор return.
def action
render_404 and return if params[:something].blank?
# here the code that will never be executed
end
ActiveRecord и HTTP 404
Также помните, что Rails спасает некоторые ошибки ActiveRecord, такие как ActiveRecord::RecordNotFound
, отображающий страницу с ошибкой 404.
Это означает, что вам не нужно спасать это действие самостоятельно
def show
user = User.find(params[:id])
end
User.find
повышает ActiveRecord::RecordNotFound
, когда пользователя не существует. Это очень мощная функция. Посмотрите на следующий код
def show
user = User.find_by_email(params[:email]) or raise("not found")
# ...
end
Вы можете упростить это, делегировав Rails проверку. Просто используйте версию взрыва.
def show
user = User.find_by_email!(params[:email])
# ...
end