原创作者: hideto   阅读:1309次   评论:0条   更新时间:2011-05-26    
看一个场景,用户注册时需要填写First Name,Last Name,Password:
<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
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

文章信息

Global site tag (gtag.js) - Google Analytics