看一个场景,用户注册时需要填写First Name,Last Name,Password:
我们可以使用虚拟属性来简化:
这样,我们输入Full Name而不是分别输入first_name和last_name,我们需要修改User类:
通过虚拟一个full_name属性来简化工作,当然,这需要确保用户输入的full_name中有空格:
- <h1>Register</h1>
- <% form_for :user, :url => users_path do |f| %>
- <p>
- First Name<br/>
- <%= f.text_field :first_name %>
- </p>
- <p>
- Last Name<br/>
- <%= f.text_field :last_name %>
- </p>
- <p>
- Password<br/>
- <%= f.password_field :password %>
- </p>
- <p>
- <%= submit_tag 'Register' %>
- </p>
- <% end %>
我们可以使用虚拟属性来简化:
- <h1>Register</h1>
- <% form_for :user, :url => users_path do |f| %>
- <p>
- Full Name<br/>
- <%= f.text_field :full_name %>
- </p>
- <p>
- Password<br/>
- <%= f.password_field :password %>
- </p>
- <p>
- <%= submit_tag 'Register' %>
- </p>
- <% end %>
这样,我们输入Full Name而不是分别输入first_name和last_name,我们需要修改User类:
- class User < ActiveRecord::Base
- def full_name
- [first_name, last_name].join(' ')
- end
- def full_name=(name)
- split = name.split(' ', 2)
- self.first_name = split.first
- self.last_name = split.last
- end
- end
通过虚拟一个full_name属性来简化工作,当然,这需要确保用户输入的full_name中有空格:
- def validate
- validate.errors.add(:full_name, 'must have a space') unless full_name.include? ' '
- end