【问题标题】:Architecture for various user types and account creation forms各种用户类型和帐户创建表单的架构
【发布时间】:2010-12-09 17:07:37
【问题描述】:

我正在使用 Rails 3 和 Devise。

我可以有两种类型的用户,我称之为“管理员”和“客户”,它们都存储在用户表中,由布尔“管理员”列的值区分。

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

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

2) 从现有帐户中(因此一个“企业”可以有多个“管理员”) - 如果我们想将其与现有业务记录相关联

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

1) 不同于用于创建上述“管理员”的表单

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

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

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

模型呢?

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

非常感谢。

【问题讨论】:

    标签: ruby-on-rails architecture devise


    【解决方案1】:

    我最初的猜测是从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 的文档。

    【讨论】:

      【解决方案2】:

      您可以为此使用一个控制器来执行不同的操作,并将您的表单定向到这些操作:

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

      来自rails form helpers

      【讨论】:

        猜你喜欢
        • 2016-12-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-04
        相关资源
        最近更新 更多