Ruby,对象不保留它们的值

时间:2015-12-17 05:32:30

标签: ruby-on-rails ruby

我有模型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

然而,这个解决方案并不是那么好。它只是创建新数组并将其重新分配给第一个。

2 个答案:

答案 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

我发现这个数组是从数据库中获取的,根本不是数组。它是某种可枚举的标准,可以作为一个数组工作,但有一些差异。