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