Архитектура для различных типов пользователей и формы создания учетных записей

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

Вопрос

Я использую 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")

от рельсы формы помощников.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top