الهندسة المعمارية لمختلف أنواع المستخدمين ونماذج إنشاء الحساب

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

سؤال

أنا أستخدم 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")

من عند القضبان تشكل مساعدين.

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