Rails カラムに配列を追加 忘備録

マイグレーションファイルはこんな感じ

rails 5.2

 def change
    add_column :areas, :area_polygon, :text, array: true
  end

スタックオーバーフローとか見てると、このようにかけとあったけどだめだった。

 add_column :documents, :share, :array, :default => []

デフォルト値を入れてはいけないということ

目的

GoogleMAPにポリゴンを設定する。 まず、カラムを上記のように作成

表示の仕組み

コントローラーからjsにオブジェクトを渡す。

before_action :export_controller_and_action_params
 
 def index
    //@areasはカラ 後から詰め込む
 
    gon.at_areas = @areas
    gon.areas = []

    # 座標と順番をgon.areasに詰め込む
    @areas.includes(:area_coordinates).each do |area|
      coordinates = []
        area.area_coordinates.each do |coord|
          latlng = {lat: coord.latitude, lng: coord.longitude}
          order = coord.in_order
          coordinates.push([order, latlng])
        end
      
      # 順番をソートする
      coordinates.sort_by! {|item| item[0]}
      # orderのインデックス[0]を削除する latl
      coordinates.map! do |c|
        c = c[1]
      end
      gon.areas.push(coordinates)
    
    end  
  end

ApplicationController

 def export_controller_and_action_params
    gon.params = {
//paramsよりコントローラーとアクションを取得。
//これにより各コントローラーとアクションごとにJavaScriptを切り分けできる。
      controller: params[:controller],
      action: params[:action],
    }
  end