使用枚举#map添加实例变量会返回错误信息

时间:2015-10-23 22:57:48

标签: ruby-on-rails ruby rails-geocoder

我目前正在开发Rails / Mapbox应用程序。我目前不存储我的require 'net/protocol' require 'uri' module Net #:nodoc: autoload :OpenSSL, 'openssl' class HTTPBadResponse < StandardError; end class HTTPHeaderSyntaxError < StandardError; end ... def initialize(address, port = nil) ... @read_timeout = 60 ... end ... 对象的地理位置,而是使用辅助方法创建临时实例变量来存储地理位置以传递给Mapbox。

下面,House参数是一个包含许多all_houses个对象的数组。

我创建了以下辅助方法:

House

我正在使用Gon Gem将此信息从我的控制器传递到Mapbox。返回的是一个数组数组,每个房子只存储地理位置。我要做的是传递为每个def add_geolocation(all_houses) all_houses.map do |house| house_geo = find_geolocation(house.address) class << house attr_accessor :geo end house.geo = house_geo end end 对象存储的每个实例变量,并传递其地理位置。

另外,要添加,我还尝试了Ruby方法Object#set_instance_variable,我得到了相同的结果。

我想要的是什么:

House

我得到的是一个只有地理位置的数组,例如:

[<House:0x007fe5670d9cc0 @a="a", @b="b", @geo=[10, 10]>, <House:0x007fe5670d9cc0 @a="a", @b="b", @geo=[10, 11]>, <House:0x007fe5670d9cc0 @a="a", @b="b", @geo=[12, -12]>, ...]

编辑:

以下是我控制器中的内容。 [[10, 10], [10, 11], [12, -12] ...] 来自Gon Gem

gon

1 个答案:

答案 0 :(得分:3)

使用map时,块的最后一行是隐式return语句,构造新数组。要返回修改后的房屋对象,house必须是返回

def add_geolocation(all_houses)
  all_houses.map do |house|
    house_geo = find_geolocation(house.address)

    class << house
      attr_accessor :geo
    end

    house.geo = house_geo
    house
  end
end

编辑:你的控制器方法可能需要这样的东西

def index
  @houses = House.all
  json_houses = add_geolocation(House.all)

  gon.houses = json_houses.as_json(methods: %i(geo))
end