Архитектура для различных типов пользователей и форм создания учетных записей - PullRequest
0 голосов
/ 09 декабря 2010

Я использую Rails 3 и Devise.

У меня может быть 2 типа пользователей, которых я называю «admin» и «client», оба хранятся в таблице Users, различаются по значениюлогический столбец «admin».

«Администратор» может быть создан 2 способами:

1) При создании новой учетной записи - в этом случае мы также создаемсвязанная «деловая» запись

2) из ​​существующей учетной записи (так что одна «бизнес» может иметь несколько «администраторов») - в случае, если мы хотим связать ее с существующей бизнес-записью

«Клиент» может быть создан 1 способом:

1) Из формы, отличной от тех, которые использовались для создания «администратора» выше

Вво всех 3 случаях будет использоваться другая форма.И после отправки у них у всех разные требования:

  • Я хочу отправить разные электронные письма каждому.
  • В первом случае «admin», указанном выше, мне нужно проверить, является ли запрошенный бизнес-URL уникальным, во втором - нет.И в случае клиента я не.
  • В первом случае «admin» я хочу создать некоторые записи базы данных по умолчанию после завершения учетной записи, но не во втором случае.
  • Когда создается учетная запись «клиента», я хочу выполнить некоторые другие действия, специфичные для этого типа учетной записи.

Должен ли я использовать один и тот же контроллер для разных типов пользователей или отдельноих?Если они должны быть одинаковыми, как он узнает, какого типа пользователя он должен создать?

А как насчет моделей?

Есть мысли о том, как это сконструировать?

Большое спасибо.

Ответы [ 2 ]

0 голосов
/ 09 декабря 2010

Моим первоначальным предположением было бы создать два подкласса из 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 и прочитайте документацию Devise.

0 голосов
/ 09 декабря 2010

Вы можете использовать один контроллер для этого с различными действиями и направлять свои формы на эти действия:

form_tag(:controller => "people", :action => "search", :method => "get")

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...