Как перенаправить на 404 в Rails?

Вам нужно будет поддерживать онлайн-сервер среднего уровня. Он может взаимодействовать между вашим приложением и MSSQL db.May быть сервлетом или обработчиком запросов, который синхронизируется между SQLite и SQL Server db.

468
задан Andrei Eliade 6 April 2017 в 12:46
поделиться

2 ответа

routes.rb
  get '*unmatched_route', to: 'main#not_found'

main_controller.rb
  def not_found
    render :file => "#{Rails.root}/public/404.html", :status => 404, :layout => false
  end
1
ответ дан 22 November 2019 в 22:49
поделиться

HTTP 404 Status

Чтобы вернуть заголовок 404, просто используйте опцию :status для метода render.

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. Просто используйте версию bang.

def show
  user = User.find_by_email!(params[:email])
  # ...
end
241
ответ дан 22 November 2019 в 22:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: