2016-10-03 74 views
0

處理序列化領域我有一個序列化的領域在我的模型如何導軌形式

class Screen < ActiveRecord::Base 
    serialize :options 
end 

用戶應該能夠添加的選項/編輯n個的每個記錄。我看到這個SO question並試圖

<%= f.fields_for :options do |o| %> 
    <%= o.label :axis_y %> 
    <%= o.text_field :axis_y %> 
    <%= o.label :axis_x %> 
    <%= o.text_field :axis_x %> 
<% end %> 

但我的問題是我不知道什麼是用戶想要添加字段,用戶可以爲options指定可變數量的屬性。什麼是最好/正確的方式來做到這一點?任何幫助非常感謝。謝謝

回答

0

我從來沒有見過serialize之前,所以我查了一下。 Here's一個教程;顯然你需要指定序列化對象的類型,以及:

serialize :options, Hash 

白名單的哈希attrributes,你有幾個選項。

您可以創建一個自定義的驗證(見here說明)

您也可以覆蓋options=方法:

def options=(val) 
    whitelisted_keys = ["some", "keys"] 
    if val.is_a?(Hash) && val.keys.all? { |key| whitelisted_keys.include? key } 
    super 
    else 
    errors.add(:options, "is invalid") 
    self 
    end 
end 

您可能還需要配置screen_params的方法,所以如果事情不是活得不要在你的問題中顯示代碼。

+0

坦克爲你提供幫助。這裏真正的問題是如何在表單中使用這個字段。我不能要求我的用戶填寫散列 –

+0

絕對需要用javacript做動態表單 –