2010-12-09 68 views
0

我正在使用Rails 3和Devise。各种用户类型和帐户创建表格的体系结构

我可以有两种类型的用户,我叫'管理员'和'客户端',都存储在用户表中,由布尔'管理'列的价值区分。

的“管理员”可以创建2种方式:

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

2)从在现有帐户中(这样一个“生意”可以有多个“管理员”) - 的情况下,我们想将它与现有的业务记录

一个“客户”可以创建1路相关联:

1)从比那些用于创建上述

的“管理员”在所有3例不同形式将被用于分离的形式。并提交后,他们都有不同的要求:

  • 我想发送不同的电子邮件给每个。
  • 在上面的第一个'admin'情况下,我需要检查请求的商业网址是否唯一,在第二种情况下我不需要。而在客户案例中,我没有。
  • 在第一个'admin'情况下,我想在完成一个帐户时创建一些默认数据库条目,但不是在第二种情况下。
  • 当创建'客户'帐户时,我想执行一些特定于该帐户类型的其他操作。

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

模型怎么样?

有关如何设计这个的任何想法?

非常感谢。

回答

0

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

请务必在STI在Rails的阅读和读取设计的文档。

0

您可以使用此不同的动作的一个控制器和引导你的形式,这些行动:

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