[英]Why is ActiveAdmin rendering empty strings instead of the `to_s` method of a relation?
[英]Object with BigDecimals returns empty strings on to_s
我有一個用於存儲地理坐標的location
表:
class Location < ActiveRecord::Base
# Location has columns/attributes
# BigDecimal latitude
# BigDecimal longitude
(...)
def to_s
@latitude.to_s << ', ' << @longitude.to_s
end
end
但是,當我在Location上調用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
=> ", "
知道為什么嗎?
您的to_s
實現是錯誤的,應該是這樣的:
def to_s
latitude.to_s << ', ' << longitude.to_s
end
ActiveRecord屬性與實例變量不同,並且在對象內部訪問@latitude
與在對象內部訪問latitude
並不相同, @latitude
是實例變量,但latitude
是ActiveRecord為您創建的方法的調用。
此外,實例變量在首次使用時會自動創建為nil
,因此您原來的to_s
只是在執行以下操作:
nil.to_s << ', ' << nil.to_s
那不是您要尋找的結果。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.