升级到Rails4

2018-10-22 09:36 更新

Rails4的教程在网络上还是比较少见的,但是Rails4的强大性却是毋庸置疑,究竟Rails4有什么新特性呢?让我们一起来看一看瞧一瞧吧!

总体

1. 支持Ruby 2.0

不支持Ruby1.8系了,最低也得1.9.3。

2. 动态查找器没有了

这个东西太灵活了,代码可能少敲两个字母,外人看来容易引起迷惑。 
原来是 find_by_name ‘aaa’ 
现在是 find_by name:’aaa’

Rails4升级

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文件,提高系统启动时间。

rails安全方面

安全相关

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兼容性很好,容易过度。

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号