0
我在活动记录文件中有以下代码。ActiveRecord属性
class Profile < ActiveRecord::Base
attr_accessor :tmp_postal_code
def postal_code=(postal_code)
@temp_postal_code = postal_code[:first] + "-" + postal_code[:second]
end
def postal_code
@temp_postal_code
end
end
我第一改写postal_code=(postal_code)
因为params
在控制器是散列例如,({:first => "1234", :second => "9999"}
)。其次,当我尝试使用getter方法时,我得到了零,所以我添加了getter方法。为了分享postal_code
属性的值,我制作了@temp_postal_code
。
现在一切工作除了一个。看看下面的控制台输出。
>> p = Profile.new
SQL (0.1ms) SET NAMES 'utf8'
SQL (0.1ms) SET SQL_AUTO_IS_NULL=0
Profile Columns (1.3ms) SHOW FIELDS FROM `profiles`
=> #<Profile id: nil, name: nil, pr: "", age: nil, postal_code: nil>
>> p.postal_code = {:first => "123", :second => "9999"}
=> {:second=>"9999", :first=>"123"}
>> p.postal_code
=> "123-9999"
>> p.postal_code
=> "123-9999"
>> p.name = "TK"
=> "TK"
>> p.postal_code
=> "123-9999"
>> p.pr = "Hello"
=> "Hello"
>> p.age = 20
=> 20
>> p
=> #<Profile id: nil, name: "TK", pr: "Hello", age: 20, postal_code: nil> # WHY!!!
>> p.postal_code
=> "123-9999"
当我试图通过p.postal_code
访问单独postal_code
属性,存在的价值。但是当我尝试显示p
时,postal_code
是nil
。它看起来像后者用于save
操作。我无法将邮政编码保存为有意义的值。
我对虚拟属性的理解和属性的覆盖有些不对。通过进一步的探索,我发现了散列符号和点符号之间的区别。
>> p[:postal_code]
=> nil
>> p[:name]
=> "TK"
>> p.postal_code
=> "123-9999"
我不知道为什么会出现这种情况。我希望能够save
与postal_code
填写。
非常感谢。现在一切工作文件。 – 2009-12-24 16:12:48