我正在使用 Rails 3 和 Devise。

我可以有两种类型的用户,我称之为“admin”和“client”,它们都存储在“用户”表中,通过布尔“admin”列的值进行区分。

可以通过两种方式创建“管理员”:

1)创建新帐户 - 在这种情况下,我们还创建了相关的“业务”记录

2)从现有帐户中(因此一个“业务”可以具有多个“ Admins”) - 在情况下,我们想将其与现有的业务记录联系起来

可以通过一种方式创建“客户端”:

1)来自与上面用于创建“管理员”的表单不同的表单

在所有 3 种情况下,将使用不同的形式。在提交时,他们都有不同的要求:

  • 我想给每个人发送不同的电子邮件。
  • 在上面的第一个“管理”情况下,我需要检查请求的业务 URL 是否唯一,在第二种情况下则不需要。而在客户案例中我则不然。
  • 在第一个“管理”情况下,我想在完成帐户后创建一些默认数据库条目,但在第二种情况下则不然。
  • 创建“客户”帐户后,我想执行特定于该帐户类型的一些其他操作。

我应该对不同的用户类型使用相同的控制器,还是将它们分开?如果它们应该相同,它如何知道应该创建什么类型的用户?

模型怎么样?

关于如何构建这个有什么想法吗?

非常感谢。

有帮助吗?

解决方案

我最初的猜测是创建两个子类 User 被称为 AdminClient. 。有点像这样:

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 表单助手.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top