Построить массив из двух хешей
Я пытаюсь построить JSON с геойсон данных.
В моем контроллере:
def index
....
respond_to do |format|
format.html
format.json { render json: { type: 'FeatureCollection', features: pois_geojson + tracks_geojson} }
end
и для шоу
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
Как вы можете видеть, методы похожи, но я не понимаю, почему для индекса он работает нормально, а не для шоу.
У меня есть эта ошибка:
`undefined method '+' для #` для этой строки: `format.json { render json: { type: 'FeatureCollection', features: poi_geojson + track_geojson} }`
1 ответ
Решение
Здесь нет +
Метод для экземпляров хеша, чтобы сформировать массив из двух хешей, вы можете сделать следующее:
[pois_geojson, tracks_geojson]
Причина, по которой это работает для pois_geojson
а также tracks_geojson
потому что они оба уже являются массивами.