从两个哈希构建数组

时间:2018-05-17 15:12:13

标签: ruby-on-rails arrays ruby hash geojson

我尝试使用geojson数据构建json。

在我的控制器中:

def index
 .... 
  respond_to do |format|
    format.html
    format.json { render json: { type: 'FeatureCollection', features: pois_geojson + tracks_geojson} }
end

和show

def show
  ...
  respond_to do |format|
    format.html
    format.json { render json: { type: 'FeatureCollection', features: poi_geojson + track_geojson} }
  end

对于索引,一切正常,我的json很好。我将此方法称为构建json。

展示方法

def poi_geojson
    {
     type: 'Feature',
     RGeo::GeoJSON.encode(@poi.lonlat),
  properties: {
    name: @poi.name,
    :'marker-color' => '#00607d',
    :'marker-symbol' => 'circle',
    :'marker-size' => 'medium'
  }
}
end


def track_geojson
    {
      type: 'Feature',
      geometry: RGeo::GeoJSON.encode(@track.path),
      properties: {
        :'color' => '#ff7800',
        :'weight' => '5',
        :'opacity' => '0.65'
      }
    }
end

索引方法

def pois_geojson
  @pois.map do |poi|
    {
      type: 'Feature',
      RGeo::GeoJSON.encode(poi.lonlat)
      properties: {
        name: poi.name,
        :'marker-color' => '#00607d',
        :'marker-symbol' => 'circle',
        :'marker-size' => 'medium'
      }
    }
  end
end

def tracks_geojson
  @tracks.map do |track|
    {
      type: 'Feature',
      geometry: RGeo::GeoJSON.encode(track.path),
      properties: {
        :'color' => '#ff7800',
        :'weight' => '5',
        :'opacity' => '0.65'
      }
    }
   end
end

正如你所看到的,方法是类似的,但我不明白为什么索引它工作正常,而不是为了节目。

我有这个错误:

  

`未定义方法'+'表示#`   对于这一行:   `format.json {render json:{type:'FeatureCollection',features:poi_geojson + track_geojson}}`

1 个答案:

答案 0 :(得分:2)

哈希实例没有+方法,要从两个哈希中形成一个数组,您可以执行以下操作:

[pois_geojson, tracks_geojson]

这适用于pois_geojsontracks_geojson的原因是因为它们都已经是数组。