Re: migrations不止可以更性感,還可以更感性,甚至更個性

[quote="rainchen"]
更性感的migration:
class User < ActiveRecord::Base  
fields do
name :string, :null => false
email :string
about :text, :default => "No description available"
end
end

[/quote]

我還看到這樣做的一個好處,更有利於Aspect Programming。

比如,Model假刪除:現在Rails裏的Model.destroy就是從數據庫裏徹底刪除,我想把系統裏的幾個模型做成假的刪除。就是把is_active字段設爲false,find也找不到它。

要做到find找不到假刪除的記錄,只要hack一下ActiveRecord::Base就行了,但是is_active字段還是要一個個數據表裏去加的。

如果把數據庫字段也定義在Model裏,就可以在一個插件裏一攬子解決這個問題。

做一個插件,先添加一個is_active字段,default設爲true,然後hack一下find,還要hack一下destroy。起個名字,比如acts_as_fake_delete。然後在需要的Model裏call一下就都搞定了。

DRY的好處之外,是代碼有意義。

實際項目的數據表中有不少功能性字段,比如Rails考慮到的created_at, updated_at,is_locked,再比如Rails沒考慮的is_active,created_by, updated_by等等,都可以用插件抽象出來。

期待這個變化。

----
論壇中樓主回帖誤解了我的意思,再多解釋一下:

這樣的例子在企業級應用裏很常見,大量的數據表要有created_by(user_id),is_active,created_at這樣的字段。

再舉一個例子,每次用到created_by的話,都要先寫migration,再在model裏定義belongs_to :created_by_user, :class_name => 'User', :foreign_key => :created_by;還要before_save的時候設置self.created_by = current_user.id;以及controller/view上CRUD的一整套東西。現在因爲必須用migration定義field,這個 “repeat yourself”的邏輯就不能徹底抽出來,做到增減隨意。
----

更多討論:http://www.iteye.com/post/387093
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章