レールを使用してユーザーがカスタマイズしたレイアウトを構築する
-
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ファイルに分離することを前提としています(これを行うための推奨方法です)。
所属していません StackOverflow