檢視英文原版
下面是乙個使用者註冊表單,可以輸入名、姓和密碼。
資料庫中也定義了這些字段:
create_table "users", :force => true do |t|
t.string "first_name"
t.string "last_name"
t.string "password"
end
但是,如果我們想改變使用者介面,在上面只顯示全名full_name欄位,而不是名first_name和姓last_name,我們怎麼辦呢?我們可以用虛擬屬性來實現。首先,我們需要修改檢視**,把名和姓的字段進行合併。
現在,如果我們提交表單,就會查詢user模型中現在並不存在的full_name欄位。我們可以通過定義乙個叫full_name的虛擬屬性來建立這個字段。
class user < activerecord::base
# getter
def full_name
[first_name, last_name].join(' ')
end
# setter
def full_name=(name)
split = name.split(' ', 2)
self.first_name = split.first
self.last_name = split.last
end
end
user模型中定義的讀取和賦值方法.讀方法讀取first_name和last_name的值,用乙個空格把他們組合起來,然後返回給使用者。賦值方法則把傳入的值在第乙個空格處分割,把分割後的第一部分賦值給first_name,第二部分賦值給last_name。
使用虛擬屬性意味著使用者介面上的字段不一定要對應到資料庫表中的每乙個字段。當用rails連線到遺留系統的資料庫、並且不能修改表中的字段時,這將非常有用。
讓我們試試我們新的表單,看看是不是好用。我們輸入全名「jonh smith」和密碼「secret」。
processing userscontroller#create (for 127.0.0.1 at 2009-01-10 21:55:44) [post]開發日誌中顯示新使用者被寫入到資料庫中。從上面的開發日誌中我們看到,全名被傳入create動作(然後被傳入user模型),不過名和姓是被分隔後才被傳入到insert語句中,然後寫入了資料庫。parameters: , "commit"=>"add user", "authenticity_token"=>"6990f4ad21cb4f9c812a6f10ceef51faa4f46ce7"}
user create (0.4ms) insert into "users" ("first_name", "last_name", "password") values('john', 'smith', 'secret')
虛擬屬性提供了乙個強大並且靈活的方法讓你來定製你的使用者介面。
翻譯外掛程式的不翻譯屬性
最近在寫乙個片假名注音外掛程式,提到,注音內容不要被翻譯外掛程式翻譯。開始在網上找到谷歌翻譯的不翻譯屬性,但是國內流行的彩雲小譯和有道不支援。由於它們的官網沒有相關說明,所以只能分析它們的外掛程式看看。谷歌翻譯,只要在標籤的class裡面增加notranslate即可。彩雲小譯,可以在標籤的clas...
Hive虛擬列 翻譯自Hive wiki
hive 0.8.0支援兩個虛擬列 block offset inside file,當前全域性檔案的偏移量。對於塊壓縮檔案,就是當前塊的檔案偏移量,即當前塊的第乙個位元組在檔案中的偏移量。select input file name,key,block offset inside file fro...
1 6 VUE計算屬性
如下,對於任何複雜邏輯,應當使用計算屬性。計算屬性 01title head firstname type text v model firstname p lastname type text v model lastname p fullnamebycomputed p fullnamebyme...