我想在我的Rails應用程序中使用ActiveRecord,但是我想要在PostgreSQL數據庫中而不是在ActiveRecord模型中編碼數據約束。ActiveRecord + postgresql +數據限制
舉例來說,如果我有一個支架生成的模型,
rails generate scaffold User name:string email:string yearofbirth:integer
我會想,以確保該名稱是相當長的。例如
class User < ActiveRecord::Base
validates :name, :length => { :maximum => 140 }
validates_uniqueness_of :name
validates_numericality_of :yearofbirth, :greater_than_or_equal_to => 1900
end
這些驗證很好,因爲如果有人試圖添加壞數據,ActiveRecord會向視圖拋出一些不錯的錯誤消息。但是,我想將規則編碼到數據庫本身,並讓數據庫向ActiveRecord拋出相同的好看和信息錯誤消息,然後將它們傳遞給視圖層。例如,
create table "Users" (
id integer unique,
name varchar(140) unique check(length(name)<140),
email varchar(255),
yearofbirth integer check (yearofbirth >= 1900)
);
我需要什麼PostgreSQL中或ActiveRecord的做才能讓這種情況發生?當我用pgAdmin III工具嘗試它時,它拋出錯誤消息,但我想定製它們。
此外,有沒有辦法將這些數據庫規則正確編碼到Ruby中的數據庫遷移文件中?
我很感激你能給我的任何幫助。
+1:限制對數據應始終處於DB,然後自動添加到ActiveRecord模型。 Rails和ActiveRecord只是訪問我們數據的一種方式,而不是唯一的強制檢查點。這確保了完整性並尊重DRY原則。因此你的問題很有意思,任何好的答案也是如此。 – lkuty 2011-12-15 12:50:19