سؤال

وأنا بناء موقع يحتوي على صفحات يحددها المستخدم التي تتكون من مجموعة من الحاجيات.

والحاجيات الأساسية إلى حد ما، على غرار ما كنت تجد في مدون. بعض الحاجيات لجمع البيانات / تنسيق العرض مع البنية الأساسية (القوائم والجداول) وغيرها توفر وظائف أكثر تعقيدا (بلوق، ألبومات الصور، الخ)

وأريد أن تسمح للمستخدم لتحديد الأدوات التي تظهر على الصفحة وإعادة ترتيبها.

وكنت تفكر في وجود القطع تكون على 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 %>

وهذا بالطبع على افتراض أن لفصل كل القطعة إلى انها الذاتية احتوى ملف جافا سكريبت (الذي من شأنه أن يكون لي الأسلوب المفضل لفعل ذلك).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top