2015-04-16 53 views
1

我有一個Rails應用程序,用戶可以在其中訂閱插件,列表是動態的,包含當前約10個插件。插件在一個應用程序的模型設計

該列表指定哪個開/關。

每個插件都有一組相當獨特的屬性。


我目前的解決方案是,應用程序有2個「家長」的模型,併爲每個插件的一個新模式:

class AddonPrototype 
    has_many :addons 
end 

class Addon 
    belongs_to :addon_prototype 
    belongs_to :user 
end 

class AddonAlpha 
    belongs_to :addon 
end 

class AddonBeta 
    belongs_to :addon 
end 

etc.. 
  1. 模型AddonPrototype都有每個插件的一個實例,用默認名稱作爲唯一的屬性。

  2. 該模型Addon與屬性enabled,custom_name。當用戶使用插件訪問頁面時,會進行檢查以查看用戶是否每個現有的AddonPrototype都有一個Addon實例,或者在運行中創建一個實例。

  3. 對於每個插件,都有一個獨特的模型(例如AddonAlphaAddonBeta等),其中每個插件都有一組屬性。

這樣的設計感覺很麻煩,這可能是一個更精簡的設置?

+0

「AddonPrototype」,「AddonAlpha」和「AddonBeta」究竟是什麼? – fivedigit

+0

'AddonPrototype'是祖父母,每個唯一插件的標準標識符,大約有10個實例。 'AddonAlpha'是'AddonPrototype'實例之一的孫子,並保存特定用戶的所有設置。 – Numbers

回答

1

我可能錯過了一些細節,所以請帶上一粒鹽。

目前,模型的命名似乎有點誤導。 AddonPrototype是一個實際的插件,而Addon模型代表已安裝插件的用戶的行爲。

這裏的結構我會去:

# app/models/user.rb 
class User < ActiveRecord::Base 
    has_many :installations 
    has_many :addons, through: :installations 
end 

# app/models/addon.rb 
class Addon < ActiveRecord::Base 
    has_many :installations 
    has_many :users, through: :installations 
end 

# app/models/installation.rb 
class Installation < ActiveRecord::Base 
    belongs_to :addon 
    belongs_to :user 
end 

AddonPrototype已更名爲Addon,和老Addon模式已更名爲InstallationSubscription或東西一樣也將是一個好名字)。

我建議不要在用戶訪問插件頁面時爲每個插件創建Installation記錄。只需在用戶實際安裝插件時創建這些記錄。這使您的代碼更簡單,數據庫更小。

+0

非常感謝,這非常好。 – Numbers

+0

如果每個Addon具有不同的屬性集合(假設AddonA需要與其關聯的外部API密鑰,並且AddonB只需要一個電子郵件地址),那麼存儲每個安裝所獨有的數據的最佳位置是? – keshavdv

相關問題