2009-07-18 119 views
2

爲Rails應用程序開發「擴展」系統最好的方法是什麼?Ruby on Rails應用程序的擴展/插件/模塊系統?

我的意思是WordPress擁有同樣的系統,比如向掛鉤註冊函數等。然後插件可以從管理面板激活/取消激活。

有沒有關於在RoR軟件中實現這種功能的一些書籍/在線資料?

回答

2

Ben Hughes提到了一些實現,這些實現都是很好的例子,並且會成爲很好的啓動點。如果你想滾從頭開始自己的解決方案,我建議類似如下:

創建兩個表/模型,控件和UserWidgets:

Widgets: 
    ID (Primary Key) 
    Name 
    Description 

UserWidgets: 
    ID (Primary Key) 
    User_ID (Foreign Key -> Users.ID) 
    Widget_ID (Foreign Key -> Widget.ID) 

現在你有一個表,用戶關聯小部件。我假設你的部件將主要通過JavaScript處理,所以添加一個新的子目錄,像這樣......

/public/javascripts/widgets 

現在,在您的窗口小部件表中的每個部件,相應的JS文件添加到該子目錄。如果您有名爲「Clock」的小部件,請添加「Clock.js」。

將適當的關聯添加到用戶模型。

has_many :user_widgets, :dependent => :destroy 
has_many :widgets, :through -> :user_widgets 

然後在某處的視圖,你可以這樣做:

<% @user.widgets.each do |w| %> 
    <%= javascript_include_tag "widgets/#{w}" -%> 
<% end %> 

這將有可能被放入佈局的任何網頁的窗口小部件會出現在。如果您不想通過JavaScript使用動態小部件,則可以在視圖/部分中的任意位置使用非常相似的視圖代碼。