我在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
部分
谁知道为什么?
答案 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的虚拟属性代码)