Rails4的教程在網(wǎng)絡(luò)上還是比較少見的,但是Rails4的強(qiáng)大性卻是毋庸置疑,究竟Rails4有什么新特性呢?讓我們一起來(lái)看一看瞧一瞧吧!
不支持Ruby1.8系了,最低也得1.9.3。
這個(gè)東西太靈活了,代碼可能少敲兩個(gè)字母,外人看來(lái)容易引起迷惑。
原來(lái)是 find_by_name ‘a(chǎn)aa’
現(xiàn)在是 find_by name:’aaa’
即如果用match的話就必須給:via選項(xiàng)。
否則的話默認(rèn)開啟了GET和POST等,容易導(dǎo)致CSRF攻擊。
請(qǐng)直接用協(xié)議,比如
post ‘controller/action’ => ‘controller#action’
為了解決業(yè)務(wù)邏輯無(wú)處可寫的窘境,在controller和model各添加了標(biāo)準(zhǔn)的concerns目錄,這里的文件都是autoload的。
不多說(shuō),rails,rake,bundle都放這里。
之前需要通過(guò)rake routes命令,現(xiàn)在可以在瀏覽器通過(guò)路徑/rails/info/routes來(lái)確認(rèn)了。
如何在sql里查找不屬于某個(gè)人的東西?
where name <> ‘user abc’
在rails4里可以User.where.not(name: name)
最初為啥不設(shè)計(jì)成這樣呢?
現(xiàn)在可以Book.where(???).pluck(:title,:price)
不調(diào)用驗(yàn)證方法和callback,速度很快。
同時(shí)廢棄了update_column方法
名字長(zhǎng)度減了一半。
mysql真是江河日下啊。
增加了hstore(無(wú)schema),UUID,range,inet,cidr等。
誰(shuí)沒事老翻舊帳?反正是因?yàn)镻UT不準(zhǔn)確,以后都用PATCH了。
我覺得POST應(yīng)該一塊改CREATE得了。
我覺得還是原來(lái)的名字好。。。
后段從Rack::Mount換為Journey了
被嵌套的緩存變化時(shí),會(huì)自動(dòng)廢棄包含之的緩存。
model也是,可以子model通知父model。
可以處理文字,數(shù)據(jù),圖像等。
這個(gè)東西雖然3就有了,但是不是說(shuō)那么好用的。
主要問(wèn)題就是預(yù)編譯速度慢,以及核心的Sprockets的版本太老。
rails4解決了這兩個(gè)問(wèn)題。
這個(gè)東西比aset pipeline還前衛(wèi),簡(jiǎn)單來(lái)說(shuō)它的做法就是畫面顯示之后,你點(diǎn)擊連接后它會(huì)通過(guò)ajax來(lái)取得新頁(yè)面,然后再判斷新頁(yè)面里的asset(css,js)之類的有沒有變化,如果有變化,則全頁(yè)reload,否則的話,只替換body和title里的東西。這就省去了解析裝載css,js的時(shí)間。
其做法導(dǎo)致的問(wèn)題是頁(yè)面本身不會(huì)被重新裝載,也就是說(shuō) window.onload,jquery的.ready方法就用不了了
不過(guò)貌似有個(gè)gem叫jquery-turbolinks可以解決這個(gè)問(wèn)題。
mixin這個(gè)類,然后再調(diào)用response.stream.write就可以通信了。
但是WEBrick不支持realtime通信,開發(fā)的時(shí)候可以用puma。
另外值得一提的是,針對(duì)實(shí)時(shí)通信,Passenger和Unicorn等這些多進(jìn)程的web server就顯得力不從心了;最好選用多線程,事件驅(qū)動(dòng)的web server,比如puma 。
此spring非彼spring,它要解決的是load各種lib時(shí)的效率問(wèn)題。
簡(jiǎn)單來(lái)說(shuō)第一次啟動(dòng)時(shí)同時(shí)啟動(dòng)一個(gè)高速load的服務(wù)進(jìn)程,第二次再load的時(shí)候,速度就會(huì)變快。
此模塊跟DHH開發(fā)的Commands大同小異,目前誰(shuí)將是將來(lái)rails的標(biāo)準(zhǔn),還沒定論。
定義一二model幾乎不費(fèi)一行代碼,因?yàn)楹芏嘈畔⒍际莚ails從數(shù)據(jù)庫(kù)里取得反推敲出來(lái)的,這就浪費(fèi)了一定的時(shí)間。
可以通過(guò)rake db:schema:cache:dump來(lái)生成schema cache dump文件,提高系統(tǒng)啟動(dòng)時(shí)間。
2012年,有人在用rails編寫的托管著rails代碼的github通過(guò)rails漏洞(嚴(yán)格來(lái)說(shuō)是編碼問(wèn)題?)冒充rails的committer提交了代碼。
和之前的model白名單不一樣的是,它通過(guò)controller來(lái)控制哪些列是安全的。
這是一個(gè)專門為了API設(shè)計(jì)的輕量級(jí)rails(類似sinatra?)
通過(guò)rails-api這個(gè)gem來(lái)安裝。
ActiveModel::Serializers來(lái)幫助序列(json)化一個(gè)model
此JBuilder也非彼JBuilder
這是一個(gè)json 模板的render。
此模板以.json.jbuilder結(jié)尾。
異步處理用。
比DelayedJob和Resque節(jié)省資源。
而且sidekiq和resque兼容性很好,容易過(guò)度。
更多建議: