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