[转载]Rails 4的一些新功能
http://www.tuicool.com/articles/eQfYbm
总体
1. 支持Ruby 2.0
不支持Ruby1.8系了,最低也得1.9.3。
2. 动态查找器没有了
这个东西太灵活了,代码可能少敲两个字母,外人看来容易引起迷惑。
原来是 find_by_name ‘aaa’
现在是 find_by name:’aaa’
3. routing里禁止了裸match
即如果用match的话就必须给:via选项。
否则的话默认开启了GET和POST等,容易导致CSRF攻击。
请直接用协议,比如
post ‘controller/action’ => ‘controller#action’
4. 增加concerns目录
为了解决业务逻辑无处可写的窘境,在controller和model各添加了标准的concerns目录,这里的文件都是autoload的。
5. 用bin目录代替script目录
不多说,rails,rake,bundle都放这里。
6. 可以在浏览器上浏览route设置。
之前需要通过rake routes命令,现在可以在浏览器通过路径/rails/info/routes来确认了。
Modle相关
7. 增加where.not
如何在sql里查找不属于某个人的东西?
where name <> ‘user abc’
在rails4里可以User.where.not(name: name)
8. pluck可以接受多个列
最初为啥不设计成这样呢?
现在可以Book.where(???).pluck(:title,:price)
9. update_columns
不调用验证方法和callback,速度很快。
同时废弃了update_column方法
10. update_attributes变味update方法了
名字长度减了一半。
11. 加强对PostgreSQL的支持
mysql真是江河日下啊。
增加了hstore(无schema),UUID,range,inet,cidr等。
ActionPack的变更点
12. PUT变PATCH
谁没事老翻旧帐?反正是因为PUT不准确,以后都用PATCH了。
我觉得POST应该一块改CREATE得了。
13. before_filter 改为before_action
我觉得还是原来的名字好。。。
14. routing改善
后段从Rack::Mount换为Journey了
模板
15. 嵌套缓存的自动废弃
被嵌套的缓存变化时,会自动废弃包含之的缓存。
model也是,可以子model通知父model。
16. 增加了.ruby模板
可以处理文字,数据,图像等。
性能方面的改善
17. AssetPipeline
这个东西虽然3就有了,但是不是说那么好用的。
主要问题就是预编译速度慢,以及核心的Sprockets的版本太老。
rails4解决了这两个问题。
18. TurboLinks
这个东西比aset pipeline还前卫,简单来说它的做法就是画面显示之后,你点击连接后它会通过ajax来取得新页面,然后再判断新页面里的asset(css,js)之类的有没有变化,如果有变化,则全页reload,否则的话,只替换body和title里的东西。这就省去了解析装载css,js的时间。
其做法导致的问题是页面本身不会被重新装载,也就是说 window.onload,jquery的.ready方法就用不了了
不过貌似有个gem叫jquery-turbolinks可以解决这个问题。
realtime web
19. ActionController::Live
mixin这个类,然后再调用response.stream.write就可以通信了。
但是WEBrick不支持realtime通信,开发的时候可以用puma。
另外值得一提的是,针对实时通信,Passenger和Unicorn等这些多进程的web server就显得力不从心了;最好选用多线程,事件驱动的web server,比如puma 。
20. spring
此spring非彼spring,它要解决的是load各种lib时的效率问题。
简单来说第一次启动时同时启动一个高速load的服务进程,第二次再load的时候,速度就会变快。
此模块跟DHH开发的Commands大同小异,目前谁将是将来rails的标准,还没定论。
21. schema cache dump
定义一二model几乎不费一行代码,因为很多信息都是rails从数据库里取得反推敲出来的,这就浪费了一定的时间。
可以通过rake db:schema:cache:dump来生成schema cache dump文件,提高系统启动时间。
安全相关
2012年,有人在用rails编写的托管着rails代码的github通过rails漏洞(严格来说是编码问题?)冒充rails的committer提交了代码。
22. Strongparameters
和之前的model白名单不一样的是,它通过controller来控制哪些列是安全的。
其它
23. Rails API
这是一个专门为了API设计的轻量级rails(类似sinatra?)
通过rails-api这个gem来安装。
24. model序列化
ActiveModel::Serializers来帮助序列(json)化一个model
25. JBuilder
此JBuilder也非彼JBuilder
这是一个json 模板的render。
此模板以.json.jbuilder结尾。
26. Sidekiq
异步处理用。
比DelayedJob和Resque节省资源。
而且sidekiq和resque兼容性很好,容易过度。