2013-10-22 13 views
8

私のモデルでは、私のモデルでは、バックグラウンドで渡しているオブジェクトを作成しているのにデータベースに保存していないときに、Postgres配列タイプのフィールドが1つあります。ですから、Active Adminを使って配列フィールドをデータベースに保存する必要があります。Active Admin Rails 4にアレイを保存する方法は?

おかげ

+0

アレイタイプ?どのデータベースサーバーを使用していますか? – phoet

+0

はい、Postgresサーバー9.1 –

+0

すみません、私の質問を正しく読んでいますか?私はアクティブな管理者によって保存しようとしています。 –

答えて

9

あなたは、アクティブな管理は、箱から出して、それをサポートしていないので、ハックのものを持っている、それはそうです。

この答えは古いですが、それは動作します:ここでHow do you handle serialized edit fields in an Active Admin resource?

は、私はこの状況を取り扱う方法をまとめたものです。モデルにアクセサを追加しました。これは、配列を改行で結合された文字列に変換して配列に戻すことができます。

# app/models/domain.rb 
class Domain < ActiveRecord::Base 
    serialize  :names, Array 
    attr_accessor :names_raw 

    def names_raw 
    self.names.join("\n") unless self.names.nil? 
    end 

    def names_raw=(values) 
    self.names = [] 
    self.names=values.split("\n") 
    end 
end 

代わりに使用するのでは、その後、ドメインのための私の管理リソースで、:names_rawフィールド:名前のフィールドを、私が使用していました。この値を設定すると、Arrayという名前が新しい値で保存されます。

# app/admin/domains.rb 
form do |f| 
    f.inputs "Domain" do 
    f.input :names_raw, :as => :text 
    end 
    f.buttons 
end 
1

ここでは似ていますが、あなたは管理者のための派手なUIを必要としない場合はソリューションにとっても簡単です。

# app/model/thing.rb 
def some_array_column= items 
    if items.is_a? String 
    super items.split(" ") 
    else 
    super items 
    end 
end 

そして

# app/admin/thing.rb 
ActiveAdmin.register Thing do 
    index do 
    column "Things" { |t| (t.some_array_column || []).join(" ") } 
    end 
end 
関連する問題