Архитектура для различных типов пользователей и формы создания учетных записей
-
25-09-2019 - |
Вопрос
Я использую Rails 3 и разработку.
У меня могут быть 2 типа пользователей, которые я звоню «admin» и «Client», как хранится в таблице пользователей, дифференцированных значением колонки Boolean 'Admin'.
«Admin» может быть создан 2 способами:
1) при создании новой учетной записи - в этом случае мы также создаем связанную запись «деловой»
2) изнутри существующей учетной записи (так что один «бизнес» может иметь несколько «администраторов») - в том случае, если мы хотим связать его с существующей бизнес-записью
«Клиент» может быть создан 1 способ:
1) из формы отдельно, чем те, которые используются для создания «администратора» выше
Во всех 3 случаях будет использоваться другая форма. И при подаче все они имеют разные требования:
- Я хочу отправить разные письма на каждый.
- В первом случае «администратор» выше мне нужно проверить, является ли запрошенная бизнес 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 в Rails и прочитайте документацию разработки.
Другие советы
Вы можете использовать один контроллер для этого с разными действиями и направлять свои формы к тем действиям:
form_tag(:controller => "people", :action => "search", :method => "get")