ActiveAdminでserializedされたカラムを扱う

ActiveAdminのフォームでserializeされたidなどを得ようとするとtextエリアに手入力をしないといけないのでセレクトボックスで選択できるようにしてみました。

まずはシリアライズされたデータを保存するカラムを作成します。

db/migrate/xxxx_create_user.rb

class CreateUsers < ActiveRecord::Migration
  def change
    create_table :users do |t|
      t.text    :keyword_ids
    end
  end
end

空のデータが入らないようにします。

app/model/user.rb

serialize :keyword_ids, Array

def keyword_ids_row
  self.keyword_ids
end

def keyword_ids_row=(values)
  self.keyword_ids = values.reject(&:blank?)
end

permit_paramsで配列を受け取れるようにするのとformで複数選択可能にするためにmultiple: trueを設定します。

app/amin/user.rb

permit_params {keyword_ids_row: []}

form do |f|
  f.inputs do
    f.input :keyword_ids_row, as: :select, collection: Keyword.all, multiple: true
  end
end

チェックボックスにしたければこちら。

f.input , :keyword_ids_row, as: :check_boxes, collection: Keyword.all

参考 http://morizyun.github.io/blog/active-admin-gem-rails/