レールを使用してユーザーがカスタマイズしたレイアウトを構築する

StackOverflow https://stackoverflow.com/questions/1204176

  •  05-07-2019
  •  | 
  •  

質問

一連のウィジェットで構成されるユーザー定義のページを持つサイトを構築しています。

ウィジェットはかなり基本的なもので、Bloggerにあるものと似ています。一部のウィジェットは、基本構造(リスト、テーブル)を使用したデータ収集/フォーマットプレゼンテーション用で、他のウィジェットはより複雑な機能(ブログ、フォトアルバムなど)を提供します

ユーザーがページに表示するウィジェットを選択して並べ替えることを許可したい。

ウィジェットをSTI(BlogWidget、GalleryWidgetなど)にし、各ウィジェットインスタンスにfkey user_idと並べ替えの位置を持たせることを検討していました。

次に、ユーザーのshow.html.erbには次のものが含まれます。

for widget in current_user.widgets
    render widget
end

もっと良い方法はありますか?

役に立ちましたか?

解決 2

最終的に次のように実装しました:

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

他のヒント

「ウィジェット」という2つのモデルを作成します。および&quot; UserWidgets&quot;は次のようになります。

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

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

すべてのウィジェットのリストを取得するために@ user.widgetsを実行できるように、適切な関連付けを設定します。データベースにあるウィジェットと同じ名前をウィジェットに付けると、view / layout / partialで次のようにすることができます。

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

これはもちろん、各ウィジェットを独自の自己完結型JavaScriptファイルに分離することを前提としています(これを行うための推奨方法です)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top