适用于各种用户类型和帐户创建形式的架构
-
25-09-2019 - |
题
我正在使用 Rails 3 和 Devise。
我可以有两种类型的用户,我称之为“admin”和“client”,它们都存储在“用户”表中,通过布尔“admin”列的值进行区分。
可以通过两种方式创建“管理员”:
1)创建新帐户 - 在这种情况下,我们还创建了相关的“业务”记录
2)从现有帐户中(因此一个“业务”可以具有多个“ Admins”) - 在情况下,我们想将其与现有的业务记录联系起来
可以通过一种方式创建“客户端”:
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
请务必阅读 Rails 中的 STI 并阅读 Devise 的文档。
其他提示
您可以使用一个控制器来执行不同的操作,并将表单定向到这些操作:
form_tag(:controller => "people", :action => "search", :method => "get")
从 Rails 表单助手.
不隶属于 StackOverflow