الهندسة المعمارية لمختلف أنواع المستخدمين ونماذج إنشاء الحساب
-
25-09-2019 - |
سؤال
أنا أستخدم Rails 3 وأضع.
يمكن أن يكون لدي نوعان من المستخدمين الذين أسميه "المسؤول" و "العميل" ، وكلاهما مخزّن في جدول المستخدمين ، متباينة حسب قيمة عمود المسؤول المنطقي.
يمكن إنشاء "مسؤول" بطريقتين:
1) عند إنشاء حساب جديد - في هذه الحالة ، نقوم أيضًا بإنشاء سجل "أعمال" مرتبط
2) من داخل حساب موجود (لذلك يمكن أن يكون لدى "عمل" واحد "مدراء" متعددين) - في حالة نريد ربطه بسجل أعمال حالي
يمكن إنشاء "عميل" طريقة واحدة:
1) من نموذج منفصل عن تلك المستخدمة لإنشاء "مسؤول" أعلاه
في جميع الحالات الثلاث ، سيتم استخدام شكل مختلف. وعند التقديم لديهم جميع متطلبات مختلفة:
- أريد إرسال رسائل بريد إلكتروني مختلفة إلى كل منها.
- في حالة "المسؤول" الأولى أعلاه ، أحتاج إلى التحقق مما إذا كان عنوان URL التجاري المطلوب فريدًا ، في الحالة الثانية التي لا أفعلها. وفي حالة العميل لا أفعل.
- في حالة "المسؤول" الأولى ، أود إنشاء بعض إدخالات قاعدة البيانات الافتراضية عند الانتهاء من حساب ، ولكن ليس في الحالة الثانية.
- عند إنشاء حساب "عميل" ، أريد تنفيذ بعض الإجراءات الأخرى الخاصة بنوع الحساب هذا.
هل يجب أن أستخدم وحدة التحكم نفسها لأنواع المستخدمين المختلفة ، أم فصلها؟ إذا كان ينبغي أن تكون هي نفسها ، كيف يعرف نوع المستخدم الذي يجب أن ينشئه؟
ماذا عن النماذج؟
أي أفكار حول كيفية المهندس المعماري هذا؟
شكرا جزيلا.
المحلول
سيكون تخميني الأولي هو إنشاء فئتين فرعيتين من User
اتصل Admin
و Client
. مثل هذا قليلا:
class User < ActiveRecord::Base
end
class Admin < User
devise :database_authenticatable, :etc
after_create :create_business
validates_uniqueness_of :business_url
# etc
end
class Client < User
devise :database_authenticatable, :etc
# etc
end
بعد ذلك ، يمكنك إضافة أشكال مختلفة في config/routes.rb
:
YourApp::Application.routes.draw do
# for the cases that someone can create their own user
devise_for :clients
devise_for :admins
# for creating it when logged in as admin
namespace :backend do
resources :admins
end
end
تأكد من القراءة على STI في القضبان وقراءة وثائق الربط.
نصائح أخرى
يمكنك استخدام وحدة تحكم واحدة لهذا الغرض من خلال إجراءات مختلفة وتوجيه النماذج الخاصة بك إلى تلك الإجراءات:
form_tag(:controller => "people", :action => "search", :method => "get")
من عند القضبان تشكل مساعدين.