2016-09-05 58 views
9

我正在構建一個CMS,管理員必須能夠定義不同類型(文本,複選框等)的任意數字字段。用戶然後可以填寫這些字段並生成帖子。如何讓用戶在Rails中定義任意數量的字段

這怎麼能在Rails中完成?我想這些「虛擬」屬性的持久性將在數據庫中的序列化屬性中完成。但我不知道如何構建視圖和控制器,或者應該定義字段的位置。

回答

3

只要是用戶定義的,它永遠不是一個列(字段),它始終是數據庫中的一行(實體) - 用戶無法定義數據結構。

這裏有兩個想法。 (1)是比較習慣的「Rails方式」。 (2)稍微不復雜,但可能會將您與您的特定DBMS聯繫起來。

(1)使用四種模式:Posts(N:1)PostTypes(1:N)PostFields(1:N)PostValues(N:1 Posts):

create_table :post_types do |t| 
    t.string :name 
    t.text :description 
    .... 

end 

create_table :post_fields do |t| 
    t.references :post_type 
    t.string :name 
    t.integer :type 
    t.boolean :required 
    .... 
end 

create_table :posts do |t| 
    t.references :post_type 
    (... common fields for all posts, like user or timestamp) 

end 
create_table :post_values do |t| 
    t.references :post 
    t.references :post_field 
    t.string :value 
    .... 
end 

唯一的問題是,你」重新限定爲在數據庫中的單一類型的值,則可以做一個多態型的關聯和用於創建不同的模型:boolean_post_values,:float_post_values等

  • 另外一個解決方案可以是使用基於json的數據結構,即i。即與上述相同的,而是PostValues只是它保存在一個領域Posts

    create_table :posts do |t| t.references :post_type t.json :data ... end // ... no table :post_values

  • 這可能是比較容易的,但JSON是Postgres特定的數據類型(雖然你可以使用字符串並自己做de /編碼)。

    相關問題