2013-10-22 9 views
8

Używam Active Admin w Railsach 4. W moim modelu mam jedno pole, które jest typem tablicy Postgres, gdy tworzę obiekt, który przechodzi w tle, ale nie zapisuje w bazie danych. Więc co muszę zrobić, aby zapisać pole tablicy w bazie danych poprzez Active Admin.Jak zapisać tablicę w Active Admin Rails 4?

Dzięki

+0

typ tablicy? z którego serwera baz danych korzystasz? – phoet

+0

tak, serwer Postgres 9.1 –

+0

Przepraszam, Czytałem poprawnie moje pytanie ??? Próbuję go zapisać przez aktywnego administratora. –

Odpowiedz

9

Masz technikę rzeczy ponieważ aktywny Administrator nie obsługuje go z pudełka, jak się wydaje.

Choć ta odpowiedź jest stary, to działa: How do you handle serialized edit fields in an Active Admin resource?

Oto podsumowanie tego, jak mam obchodzić tę sytuację. Dodałem akcesor do modelu, który może przekształcić Array w ciąg połączony z linią i podzielić go z powrotem na Array.

# 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 

wtedy, moim opiekunie źródło domeny, zamiast używania: pole nazwy, użyłem: pole names_raw. ustawienie tej wartości spowoduje zapisanie nazw Array z nowymi wartościami.

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

Oto podobny, ale jeszcze prościej podjąć się rozwiązania, jeśli nie trzeba fantazyjny interfejs dla administratora.

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

I

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