我有模型Shop
,它有这种方法:
def distance(dist)
@distance = dist
end
然后在as_json
方法中我做了类似的事情:
def as_json(options = {})
result = super(include: [:distance])
if @distance.nil?
@distance = -1
end
result[:distance] = @distance
result
end
然后在其他地方我为每个Shop
分配距离某种值:
shops.each do |shop|
distance = 123123
shop.distance distance / 1000
end
puts shops.to_json
当我调用puts shops.to_json
方法时,它会向我显示我的商店的JSON数组,其中每个distance
等于-1
。
当我访问数组时,此距离值保持在内部循环中但不在外部。
为什么会这样?它没有保留我发送的价值。
更新
我通过使用额外的数组来解决它:
arr = []
shops.each do |shop|
distance = HelperModule.distance_in_meters loc, shop.location
shop.distance distance / 1000
arr << shop
end
shops = arr
puts shops.to_json
然而,这个解决方案并不是那么好。它只是创建新数组并将其重新分配给第一个。
答案 0 :(得分:0)
尝试从距离
中删除@答案 1 :(得分:0)
正如我在更新的问题中所提到的,如果我将值分配给新数组然后将其重新分配给原始数组,这将有效:
arr = []
shops.each do |shop|
distance = HelperModule.distance_in_meters loc, shop.location
shop.distance distance / 1000
arr << shop
end
shops = arr
puts shops.to_json
第二种方法是在调用循环之前使用它:
shops = shops.to_a
我发现这个数组是从数据库中获取的,根本不是数组。它是某种可枚举的标准,可以作为一个数组工作,但有一些差异。