2013-10-22 9 views
8

Ich verwende Active Admin in Rails 4. In meinem Modell habe ich ein Feld, das ein Postgres-Array-Typ ist, wenn ich das Objekt erstellen, das es im Hintergrund übergibt, aber es wird nicht in der Datenbank gespeichert. Also was muss ich tun, um das Array-Feld in der Datenbank über Active Admin zu speichern.Wie speichert man ein Array in Active Admin Rails 4?

Dank

+0

Array-Typ? Welchen Datenbankserver benutzen Sie? – phoet

+0

ja, Postgres server 9.1 –

+0

Entschuldigung, habe meine Frage richtig gelesen ??? Ich versuche, es durch aktiven Administrator zu speichern. –

Antwort

9

Sie Hack Zeug haben, da aktiv Admin es nicht aus der Box unterstützt, so scheint es.

Obwohl diese Antwort alt ist, funktioniert es: How do you handle serialized edit fields in an Active Admin resource?

Hier ist eine Zusammenfassung, wie ich diese Situation behandelt. Ich habe einen Accessor zu dem Modell hinzugefügt, der das Array in eine Zeichenfolge verwandeln kann, die durch einen Zeilenvorschub verbunden ist, und es wieder in ein Array aufteilen.

# 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 

dann, für Domain in meiner Admin-Ressource, anstatt das: Name Feld, benutzen ich das: names_raw Feld. Wenn Sie diesen Wert festlegen, werden die Namen Array mit den neuen Werten gespeichert.

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

Hier ist eine ähnliche, aber noch einfacher treffen auf eine Lösung, wenn Sie für den Admin keine Phantasie UI benötigen.

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

Und

# app/admin/thing.rb 
ActiveAdmin.register Thing do 
    index do 
    column "Things" { |t| (t.some_array_column || []).join(" ") } 
    end 
end 
Verwandte Themen