我有一个用于存储地理坐标的location
表:
class Location < ActiveRecord::Base
# Location has columns/attributes
# BigDecimal latitude
# BigDecimal longitude
(...)
def to_s
@latitude.to_s << ', ' << @longitude.to_s
end
end
但是,当我在某个位置调用to_s
时,BigDecimal
内部会转换为空字符串。
ruby > l
=> #<Location id: 1, latitude: #<BigDecimal:b03edcc,'0.4713577E2',12(12)>, longitude: #<BigDecimal:b03ecb4,'-0.7412786E2',12(12)>, created_at: "2011-08-06 03:41:51", updated_at: "2011-08-06 22:21:48">
ruby > l.latitude
=> #<BigDecimal:b035fb0,'0.4713577E2',12(12)>
ruby > l.latitude.to_s
=> "47.13577"
ruby > l.to_s
=> ", "
知道为什么吗?
答案 0 :(得分:3)
您的to_s
实施错误,应该是:
def to_s
latitude.to_s << ', ' << longitude.to_s
end
ActiveRecord属性与实例变量不同,访问对象内部@latitude
与访问对象内部latitude
不同,@latitude
是实例变量但{{1}调用ActiveRecord为您创建的方法。
此外,实例变量在首次使用时会自动创建为latitude
,因此原始nil
只是这样做:
to_s
这不是您正在寻找的结果。