Rails6新特性actionable Error
视频:https://gorails.com/episodes/actionable-errors-in-rails-6?autoplay=1
这篇视频介绍了Rails6的一个新功能:
actionable error
这个模块定义一个action来解决各种错误类型。通过在❌提示网页上添加了一个button按钮。一键处理相关的❌。
用法:
定义了一个"Run pending migrations" , 当遇到PendingMigrationError后,执行action块内的命令。
# class PendingMigrationError < MigrationError
# include ActiveSupport::ActionableError
#
# action "Run pending migrations" do
# ActiveRecord::Tasks::DatabaseTasks.migrate
# end
# end
解释:
这个功能用在了rails遇到错误时的渲染一个按键,用来对错误进行处理:
<% actions = ActiveSupport::ActionableError.actions(exception) %> <% if actions.any? %>
<div class="actions">
<% actions.each do |action, _| %>
<%= button_to action, ActionDispatch::ActionableExceptions.endpoint, params: {
error: exception.class.name,
action: action,
location: request.path
} %>
<% end %>
</div>
<% end %>
button_to生成一个带一个button的form。用于提交由一系列options创建的URL。
这个模块的call调用ActionableError.dispatch方法执行自定义的块内的命令。
def call(env)
request = ActionDispatch::Request.new(env)
return @app.call(env) unless actionable_request?(request) ActiveSupport::ActionableError.dispatch(request.params[:error].to_s.safe_constantize, request.params[:action]) redirect_to request.params[:location]
end
案例:
//
rails g scaffold Post title
//2 打开本地网页localhost:300,由于没有执行rails db:migrate会报❌
//ActiveRecord::PendingMigrationError
//Migrations are pending. To resolve this issue, run: rails db:migrate RAILS_ENV=development
//然后附加一个按钮 "Run pending migrations"
点击这个按钮后会执行:migrate命令,可以在terminal上看到Migrating to CreatePosts (20190509031430).
利用actionable error可以自定义错误处理
在PostsController内添加一个对NoDataError类型错误的一键处理。
class PostsController < ApplicationController
... class NoDAtaError < StandardError
include ActiveSupport::ActionableError action "Run seeds" do
Rails.application.load_seed
end
end
def index
@posts = Post.all
raise NoDataError if @posts.none?
end
进入localhost:3000/posts, 如果没有数据post就会进入❌页面,并添加一个button。
添加种子:在seeds.rb内添加:Post.create(title:"hello Error!")。
点击button,后会运行块内的load_seed命令。并重新渲染网页。
Rails6新特性actionable Error的更多相关文章
- ElasticSearch 5学习(10)——结构化查询(包括新特性)
之前我们所有的查询都属于命令行查询,但是不利于复杂的查询,而且一般在项目开发中不使用命令行查询方式,只有在调试测试时使用简单命令行查询,但是,如果想要善用搜索,我们必须使用请求体查询(request ...
- [干货来袭]C#6.0新特性
微软昨天发布了新的VS 2015 ..随之而来的还有很多很多东西... .NET新版本 ASP.NET新版本...等等..太多..实在没消化.. 分享一下也是昨天发布的新的C#6.0的部分新特性吧.. ...
- 【译】Meteor 新手教程:在排行榜上添加新特性
原文:http://danneu.com/posts/6-meteor-tutorial-for-fellow-noobs-adding-features-to-the-leaderboard-dem ...
- ES6新特性概览
本文基于lukehoban/es6features ,同时参考了大量博客资料,具体见文末引用. ES6(ECMAScript 6)是即将到来的新版本JavaScript语言的标准,代号harmony( ...
- TypeScript 2.0候选版(RC)已出,哪些新特性值得我们关注?
注:本文提及到的代码示例下载地址 - Runnable sample to introduce Typescript 2.0 RC new features 作为一个Javascript的超集, Ty ...
- MySQL5.6 GTID新特性实践
MySQL5.6 GTID新特性实践 GTID简介 搭建 实验一:如果slave所需要事务对应的GTID在master上已经被purge了 实验二:忽略purged的部分,强行同步 本文将简单介绍基于 ...
- IOS第三天-新浪微博 - 版本新特性,OAuth授权认证
*********版本新特性 #import "HWNewfeatureViewController.h" #import "HWTabBarViewController ...
- Microsoft Dynamics AX 7 新特性探索 - Demo 部署(Part 1)
Dynamics AX 7已经发布了一段时间了,我们知道这次微软为我们带来了许多令人激动的新特性.在这个系列里,Reinhard将揭开New Dynamics AX的神秘面纱,和大家一起探索这些新的特 ...
- JS魔法堂:ES6新特性——GeneratorFunction介绍
一.前言 第一次看koajs的示例时,发现该语句 function *(next){...............} ,这是啥啊?于是搜索一下,原来这是就是ES6的新特性Generator ...
随机推荐
- nginx+gunicorn拓扑
加装Nginx是否有必要 Nginx作为代理服务器,监听来自外部的80端口的请求:而Gunicorn负责监听本地机8000端口的请求.Nginx会把来自外部的请求转发给Gunicorn处理,接收到响应 ...
- Linux命令---ln、readlink
ln 无参数--------创建硬链接 -s -------------创建软链接 用法:ln [option] 源文件 目标文件 ln test.txt test_hard.txt 只有在同 ...
- WijmoJS V2019.0 Update2发布:再度增强 React 和 Vue 框架的组件功能
前端开发工具包 WijmoJS 在2019年的第二个主要版本 V2019.0 Update2 已经发布,本次发布涵盖了React 和 Vue 框架下 WijmoJS 前端组件的功能增强,并加入更为易用 ...
- 关于tk.mybatis.spring.mapper.SpringBootBindUtil$SpringBoot2Bind.bind(SpringBootBindUtil.java:129) ~[mapper-spring-boot-autoconfigure-1.2.3.jar:na]的问题
错误如下: java.lang.RuntimeException: java.lang.reflect.InvocationTargetException at tk.mybatis.spring.m ...
- Atomic long 和long的区别
Atomic long 和long: 前者是一个对象,包含对象头(object header)以用来保存hashcode.lock等信息,32位系统占用8个字节,64位系统占16个字节,所以在64位系 ...
- ARST第二周打卡
Algorithm : 做一个 leetcode 的算法题 题目:一个无序数组里有99个不重复正整数,范围从1到100,唯独缺少一个整数.如何找出这个缺失的整数? int FindOneMissNum ...
- pycharm连接mysql是出现Connection to orm02@127.0.0.1 failed. [08001] Could not create connection to database server. Attempted reconnect 3 times. Giving up.
下面这个问题反正我是遇到了,也是难为我好几天,于是我决定发一个教程出来给大家看看!希望能帮助你们 原因: 可能是数据库的版本与本机装的驱动不匹配导致的, 解决方案一: 在 url 后面街上一句 因为笔 ...
- 【二分】Shell Pyramid
[来源]:2008年哈尔滨区域赛 [题目链接]: http://acm.hdu.edu.cn/showproblem.php?pid=2446 [题意] 题目是真的长呀,其实就问一个问题. 按照图里面 ...
- 学习实践:使用模式,原则实现一个C++数据库访问类
一.概述 在我参与的多个项目中,大家使用libMySQL操作MySQL数据库,而且是源码即复用,在多个项目中有多套相同或相似的源码,这样的复用方式给开发带来了不变,而且libMySQL的使用比较麻烦, ...
- java——ArrayList中contains()方法中的疑问
问题引子: ist<Student> students=new ArrayList<Student>(); students.add(new Student("201 ...