2015-05-21 58 views
0

我正在Rails項目的MySQL數據庫中創建一個新表。問題是有些字段將永遠在桌面上,但其他字段我還不知道 - 它們將是用戶生成的。我知道動態添加字段到表是不可能的。因此,是否有任何良好的解決方案呢?也許是寶石?如何在具有更改列的MySQL中存儲數據

要說清楚,假設我有一個名爲UserInformation的表。它有列名,性別,身高。但是我需要允許用戶想要的任何其他內容。所以,對於用戶A,我需要存儲姓名,性別,身高,體重。對於用戶B,我需要存儲姓名,性別,身高和favorite_tv_show。對於用戶C我需要存儲名稱,性別,身高和favorite_tv_show,favorite_color,mothers_name。

因爲我不知道所有的潛在屬性,我不能預先將它們添加爲列名。

我無法想象我是第一個遇到這個問題的人。非常感謝您提前!

回答

1

創建另一個表,其中包含key(字符串,索引),value(字符串,可能)和user_id(整數)。您可能需要調整某些內容以適應您的需求,這只是一個想法,並不適合現在。

對於您希望存儲的每個用戶的每個屬性,就像在該表中創建一個單獨的行一樣。

我叫它ExtraField

class ExtraField < ActiveRecord::Base 
    belongs_to :user 
end 

class User < ActiveRecord::Base 
    has_many :extra_fields 

    accepts_nested_attributes_for :extra_fields, 
    allow_destroy: true, 
    reject_if: :all_blank 
end 

你不得不修改使用nested form這些屬性。這是一個先進的概念,有很多關於它的docs。實質上,它允許您不僅更新記錄本身(如用戶),還更新其相關記錄(如額外字段),使用同一組參數。這使您可以編輯單個頁面上的所有字段。

相關問題