升級到Rails4

2018-10-22 09:36 更新

Rails4的教程在網(wǎng)絡(luò)上還是比較少見的,但是Rails4的強(qiáng)大性卻是毋庸置疑,究竟Rails4有什么新特性呢?讓我們一起來看一看瞧一瞧吧!

總體

1. 支持Ruby 2.0

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

2. 動態(tài)查找器沒有了

這個(gè)東西太靈活了,代碼可能少敲兩個(gè)字母,外人看來容易引起迷惑。 
原來是 find_by_name ‘a(chǎn)aa’ 
現(xiàn)在是 find_by name:’aaa’

Rails4升級

3. routing里禁止了match

即如果用match的話就必須給:via選項(xiàng)。

否則的話默認(rèn)開啟了GET和POST等,容易導(dǎo)致CSRF攻擊。 
請直接用協(xié)議,比如 
post ‘controller/action’ => ‘controller#action’

4. 增加concerns目錄

為了解決業(yè)務(wù)邏輯無處可寫的窘境,在controller和model各添加了標(biāo)準(zhǔn)的concerns目錄,這里的文件都是autoload的。

5. 用bin目錄代替script目錄

不多說,rails,rake,bundle都放這里。

6. 可以在瀏覽器上瀏覽route設(shè)置。

之前需要通過rake routes命令,現(xiàn)在可以在瀏覽器通過路徑/rails/info/routes來確認(rèn)了。

Modle相關(guān)

7. 增加where.not

如何在sql里查找不屬于某個(gè)人的東西? 
where name <> ‘user abc’ 
在rails4里可以User.where.not(name: name)

8. pluck可以接受多個(gè)列

最初為啥不設(shè)計(jì)成這樣呢? 
現(xiàn)在可以Book.where(???).pluck(:title,:price)

9. update_columns

不調(diào)用驗(yàn)證方法和callback,速度很快。 
同時(shí)廢棄了update_column方法

10. update_attributes變?yōu)閡pdate方法了

名字長度減了一半。

11. 加強(qiáng)對PostgreSQL的支持

mysql真是江河日下啊。 
增加了hstore(無schema),UUID,range,inet,cidr等。

ActionPack的變更點(diǎn)

12. PUT變PATCH

誰沒事老翻舊帳?反正是因?yàn)镻UT不準(zhǔn)確,以后都用PATCH了。 
我覺得POST應(yīng)該一塊改CREATE得了。

13. before_filter 改為before_action

我覺得還是原來的名字好。。。

14. routing改善

后段從Rack::Mount換為Journey了

模板

15. 嵌套緩存的自動廢棄

被嵌套的緩存變化時(shí),會自動廢棄包含之的緩存。 
model也是,可以子model通知父model。

16. 增加了.ruby模板

可以處理文字,數(shù)據(jù),圖像等。

性能方面的改善

17. AssetPipeline

這個(gè)東西雖然3就有了,但是不是說那么好用的。 
主要問題就是預(yù)編譯速度慢,以及核心的Sprockets的版本太老。 
rails4解決了這兩個(gè)問題。

18. TurboLinks

這個(gè)東西比aset pipeline還前衛(wèi),簡單來說它的做法就是畫面顯示之后,你點(diǎn)擊連接后它會通過ajax來取得新頁面,然后再判斷新頁面里的asset(css,js)之類的有沒有變化,如果有變化,則全頁reload,否則的話,只替換body和title里的東西。這就省去了解析裝載css,js的時(shí)間。

其做法導(dǎo)致的問題是頁面本身不會被重新裝載,也就是說 window.onload,jquery的.ready方法就用不了了 
不過貌似有個(gè)gem叫jquery-turbolinks可以解決這個(gè)問題。

realtime web

19. ActionController::Live

mixin這個(gè)類,然后再調(diào)用response.stream.write就可以通信了。 
但是WEBrick不支持realtime通信,開發(fā)的時(shí)候可以用puma。

另外值得一提的是,針對實(shí)時(shí)通信,Passenger和Unicorn等這些多進(jìn)程的web server就顯得力不從心了;最好選用多線程,事件驅(qū)動的web server,比如puma 。

20. spring

此spring非彼spring,它要解決的是load各種lib時(shí)的效率問題。 
簡單來說第一次啟動時(shí)同時(shí)啟動一個(gè)高速load的服務(wù)進(jìn)程,第二次再load的時(shí)候,速度就會變快。 
此模塊跟DHH開發(fā)的Commands大同小異,目前誰將是將來rails的標(biāo)準(zhǔn),還沒定論。

21. schema cache dump

定義一二model幾乎不費(fèi)一行代碼,因?yàn)楹芏嘈畔⒍际莚ails從數(shù)據(jù)庫里取得反推敲出來的,這就浪費(fèi)了一定的時(shí)間。 
可以通過rake db:schema:cache:dump來生成schema cache dump文件,提高系統(tǒng)啟動時(shí)間。

rails安全方面

安全相關(guān)

2012年,有人在用rails編寫的托管著rails代碼的github通過rails漏洞(嚴(yán)格來說是編碼問題?)冒充rails的committer提交了代碼。

22. Strongparameters

和之前的model白名單不一樣的是,它通過controller來控制哪些列是安全的。

其它

23. Rails API

這是一個(gè)專門為了API設(shè)計(jì)的輕量級rails(類似sinatra?) 
通過rails-api這個(gè)gem來安裝。

24. model序列化

ActiveModel::Serializers來幫助序列(json)化一個(gè)model

25. JBuilder

此JBuilder也非彼JBuilder 
這是一個(gè)json 模板的render。 
此模板以.json.jbuilder結(jié)尾。

26. Sidekiq

異步處理用。 
比DelayedJob和Resque節(jié)省資源。 
而且sidekiq和resque兼容性很好,容易過度。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號