2013-10-22 60 views
8

我在Rails 4中使用Active Admin。在我的模型中,我有一個字段,它是Postgres數組類型,當我創建它在後臺傳遞的對象時,它不保存到數據庫。所以我需要通過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 
相關問題