بناء تخطيط مخصصة المستخدم مع القضبان
-
05-07-2019 - |
سؤال
وأنا بناء موقع يحتوي على صفحات يحددها المستخدم التي تتكون من مجموعة من الحاجيات.
والحاجيات الأساسية إلى حد ما، على غرار ما كنت تجد في مدون. بعض الحاجيات لجمع البيانات / تنسيق العرض مع البنية الأساسية (القوائم والجداول) وغيرها توفر وظائف أكثر تعقيدا (بلوق، ألبومات الصور، الخ)
وأريد أن تسمح للمستخدم لتحديد الأدوات التي تظهر على الصفحة وإعادة ترتيبها.
وكنت تفكر في وجود القطع تكون على STI (على سبيل المثال BlogWidget، GalleryWidget) وكل حالة القطعة سيكون له USER_ID fkey وموقف للفرز.
وبعد ذلك سيتضمن 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
نصائح أخرى
وأود أن إنشاء نموذجين، "القطع" و "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 %>
وهذا بالطبع على افتراض أن لفصل كل القطعة إلى انها الذاتية احتوى ملف جافا سكريبت (الذي من شأنه أن يكون لي الأسلوب المفضل لفعل ذلك).