2009-07-30 26 views
1

我正在構建具有用戶定義頁面的網站,這些用戶定義頁面由一組小部件組成。使用導軌構建用戶自定義佈局

這些小部件相當基本,與您在Blogger中找到的相似。一些小部件用於基本結構(列表,表格)的數據收集/格式化演示,還有一些小部件提供更復雜的功能(博客,相冊等)

我想允許用戶選擇在他們的頁面上顯示哪些小部件,重新排列它們。

我正在考慮讓Widgets成爲STI(例如BlogWidget,GalleryWidget),每個Widget實例都有一個fkey user_id和一個排序位置。

則該用戶的show.html.erb將包含:

for widget in current_user.widgets 
    render widget 
end 

有沒有更好的辦法?

回答

0

我最終實現它是這樣的:

class Placement < ActiveRecord::Base 
    belongs_to :widget, :polymorphic => true 
    belongs_to :container, :polymorphic => true 

    acts_as_double_polymorphic_join(
    :widgets =>[:blogs, :galleries, :twitter_feeds], 
    :containers => [:pages, :users, :groups] 
) 

    acts_as_list :scope => :container 
end 
1

我會創造兩款車型,「部件」和「UserWidgets」,這將如下所示:

Widgets: 
    ID (Primary Key) 
    Name 
    Description 
    etc... 

UserWidgets: 
    ID 
    Position 
    Widget_ID (Foreign Key -> Widgets.ID) 
    User_ID (Foreign Key -> Users.ID) 

建立適當的關聯,以便你可以簡單地做@ user.widgets拿到名單所有小部件。如果你的名字你的小部件一樣,因爲他們在數據庫中有名稱,你可以簡單地做一個視圖/佈局以下/部分:

<% @user.widgets do |w| %> 
    <%= javascript_include_tag w.name %> 
<% end %> 

當然,這是假設你單獨每個插件到它自己的自包含的JavaScript文件(這將是我的首選方法)。

+0

是的,這也是我在問什麼更好的描述。誰能提供更好的解決方案? – ABCoder 2009-07-30 04:34:58