虚拟属性被忽略

时间:2011-05-27 12:11:52

标签: ruby-on-rails ruby-on-rails-3

我在rails中遇到了一些奇怪的虚拟属性问题。

这是我的示例模型。

class User < ActiveRecord::Base
  validates_presence_of :last_name
  validates_presence_of :first_name

  def clean!
    first_name = nil
    last_name = nil
  end
end

我可以这样做:

user = User.first
user.last_name # => "Smith"
user.clean!
user.save # => true
user.first_name # => "Smith"

现在忽略first_name = nil部分 谁知道为什么?

1 个答案:

答案 0 :(得分:3)

这不是虚拟属性,它只是一种方法。它不起作用,因为它不知道first_name是函数中的一个方法,并认为它是一个变量。使用方法:

def clean!
  self.first_name = nil
  self.last_name = nil
end

虚拟属性OTOH就像一个新的表列,可以分配给:

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

(取自http://railscasts.com/episodes/16-virtual-attributes的虚拟属性代码)