哇嗚~又要學新東西了嗎? XDrz
今天 RoR 官方宣佈了 Rails 2.0 Preview Release 的消息。不過同時也公告了,在 2.0 正式版本釋出前,會先釋出 Rails 1.2.4 版來修正一些 Rails 1.2 版的 bug 及過時用法的警告。
至於 Rails 2.0 加入了什麼新東西呢?
-
Resource
- 新的 REST URL: 比方說
/people/1;edit
變成/people/1/edit
。 - 在 route 中增加 namespace 的支援,引用官方的例子:
[code lang=”ruby”]
map.namespace(:admin) do |admin|
admin.resources :products,
:collection => { :inventory => :get },
:member => { :duplicate => :post },
:has_many => [ :tags, :images, :variants ]
end
[/code] - resource-based controller,幫助你在設定 REST route 時,可以像 ActiveRecord 那樣建立關係,比方說:
[code lang=”ruby”]
# /avatars/45 => AvatarsController#show
map.resources :avatars
# /people/5/avatar => AvatarsController#show
map.resources :people, :has_one => :avatar
[/code]
- 新的 REST URL: 比方說
-
Multiview
在 actionview 的部份導入更多的 template,以區別不同的格式,格式長成這樣:
action.format.builder
,以下是幾個例子:- xxx.html.erb: 就像過去的
rhtml
,表示格式是 HTML,而 rendering engine 是 ERb。 - xxx.atom.builder: 主要用來產生一個 mime type 為 application/atom+xml 的輸出。
而且你可以自己設計自己的 mime_type (原文中教了如何設計 for iPhone 的格式)及 template。
- xxx.html.erb: 就像過去的
-
利用 Record 的 identification 來產生 URL。
比方說你可以直接使用:
[code lang=”ruby”]
p = Person.find_by_name(‘ericsk’)
link_to p.name, p
[/code]
這樣的方式來產生 URL 指到這筆 record -
更多 HTTP 支援
其中包括了 HTTP Authentication、cache 多個 JavaScript, stylesheet 檔案,以及讓 browser 同時開啟多個 HTTP request 以增加讀取資料(如圖片)的速度。
-
Security
內建處理 CRSF attack 的機制,以及改寫了 TextHelper#sanitize method(從黑名單轉為白名單)。另外就是只支援 HTTP cookies,表示你別想再用 document.cookie 拿到東西了 :p
-
例外處理
過去處理例外情況只能用 begin … rescue … end 來作,現在可以把處理的動作寫成 method,然後在 controller 加上
rescue_from :method
關鍵字來處理,例如:
[code lang=”ruby”]
class PostsController < ApplicationController rescue_from User::NotAuthorized, :with => :deny_access
protected
def deny_access
…
end
end
[/code] -
ATOM helper
-
Query cache for ActiveRecord
-
Migration 的新寫法
直接看官方的例子,原本是寫成這樣:
[code lang=”ruby”]
create_table :people do |t|
t.column, “account_id”, :integer
t.column, “first_name”, :string, :null => false
t.column, “last_name”, :string, :null => false
t.column, “description”, :text
t.column, “created_at”, :datetime
t.column, “updated_at”, :datetime
end
[/code]
現在可以寫成:
[code lang=”ruby”]
create_table :people do |t|
t.integer :account_id
t.string :first_name, :last_name, :null => false
t.text :description
t.timestamps
end
[/code] -
XML in, JSON out
ActiveRecord 現在可以利用
from_xml
來讀取輸入的資料,而且可以用to_json
來輸出 JSON 格式的資料。 -
整理過的 ActiveRecord
一堆
acts_as_XXX
全部移到 plugin 去了(不再內建),然後預設的 adapter 只留下 MySQL、SQLite 及 PostgreSQL,要其它 DBMS 的 adapter 可以去 GEMS 裡找找看有沒有activerecord-XYZ-adapter
。 -
拿掉 :with_scope
-
ActionWebservice out, ActiveResource in
-
ActiveSupport
加作 Array#rand 及 Hash#except
-
Action Mailer
-
Rails debugger
-
切割設定檔
預設的設定值留在
config/environment.rb
,而自己的設定都放在config/initializers
下的inflections.rb
及mime_types.rb
-
可以設定 plugin 載入的順序
- code 的改進
依照 David 的建議,如果你的 rails app 在 Rails 1.2.3 (Rails 1.2.4 會有更多的 deprecation waring) 的環境中沒有任何的 waring,同時也願意移植到 Rails 2.0 環境的話,是可以考慮「升級」,直接利用:
# gem install rails --source http://gems.rubyonrails.org
就可以安裝 preview release 了。
準備要踏入 RoR 界的朋友,可以考慮一下準備直接學習 Rails 2.0 了~
Rails 2.0的Migration令人亮眼
這也是我最愛Rails 2.0的地方
不過,新的Migration表面上看起來還是有個缺點
我不知道DHH有沒有考慮到這樣
我直接列個例子
t.string :first_name, :last_name, :null => false
如果我first_name限制10,last_name限制20
我就得拆開了…
所以我是想說
:limit => [:first_name => 10, :last_name => 20]
或許這是個方式
其他像是:default也能適用
但是我不知道新的Migration是不是可以這樣玩
@CFC
就算不能這樣玩,你也可以手動去改 migration 的 code 讓它可以 😛
[quote comment=””]@CFC
就算不能這樣玩,你也可以手動去改 migration 的 code 讓它可以 :P[/quote]
yeah
有這打算
不過#rubyonrails的人跟我說 不要這樣作會比較好lol
反正等Rails 2.0 stable release後
我再來自己玩玩吧