Rails寶典之第十六式: 虛擬屬性

看一個場景,用戶註冊時需要填寫First Name,Last Name,Password: 
Java代碼  收藏代碼
  1. <h1>Register</h1>  
  2. <% form_for :user, :url => users_path do |f| %>  
  3.   <p>  
  4.     First Name<br/>  
  5.     <%= f.text_field :first_name %>  
  6.   </p>  
  7.   <p>  
  8.     Last Name<br/>  
  9.     <%= f.text_field :last_name %>  
  10.   </p>  
  11.   <p>  
  12.     Password<br/>  
  13.     <%= f.password_field :password %>  
  14.   </p>  
  15.   <p>  
  16.     <%= submit_tag 'Register' %>  
  17.   </p>  
  18. <% end %>  

我們可以使用虛擬屬性來簡化: 
Java代碼  收藏代碼
  1. <h1>Register</h1>  
  2. <% form_for :user, :url => users_path do |f| %>  
  3.   <p>  
  4.     Full Name<br/>  
  5.     <%= f.text_field :full_name %>  
  6.   </p>  
  7.   <p>  
  8.     Password<br/>  
  9.     <%= f.password_field :password %>  
  10.   </p>  
  11.   <p>  
  12.     <%= submit_tag 'Register' %>  
  13.   </p>  
  14. <% end %>  

這樣,我們輸入Full Name而不是分別輸入first_name和last_name,我們需要修改User類: 
Java代碼  收藏代碼
  1. class User < ActiveRecord::Base  
  2.   def full_name  
  3.     [first_name, last_name].join(' ')  
  4.   end  
  5.   
  6.   def full_name=(name)  
  7.     split = name.split(' '2)  
  8.     self.first_name = split.first  
  9.     self.last_name = split.last  
  10.   end  
  11. end  

通過虛擬一個full_name屬性來簡化工作,當然,這需要確保用戶輸入的full_name中有空格: 
Java代碼  收藏代碼
  1. def validate  
  2.   validate.errors.add(:full_name, 'must have a space') unless full_name.include? ' '  
  3. end  
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章