Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rails通过多个具有名称空间模型的多态性_Ruby On Rails_Ruby_Namespaces_Has Many Through_Polymorphic Associations - Fatal编程技术网

Ruby on rails Rails通过多个具有名称空间模型的多态性

Ruby on rails Rails通过多个具有名称空间模型的多态性,ruby-on-rails,ruby,namespaces,has-many-through,polymorphic-associations,Ruby On Rails,Ruby,Namespaces,Has Many Through,Polymorphic Associations,下面是我的课程和迁移。不确定我做错了什么,是否设置了错误的关联,或者我没有使用正确的属性/方法返回我期望的记录。例如,如何获取帐户的所有成员(super\u admin\u用户、admin\u用户和标准用户)的列表?在Rails控制台中,如果我尝试Accounts::Account.first.users\u Account\u members,我会得到以下结果: 2.4.0 :003 > Accounts::Account.first.users_account_members Acco

下面是我的课程和迁移。不确定我做错了什么,是否设置了错误的关联,或者我没有使用正确的属性/方法返回我期望的记录。例如,如何获取
帐户的所有成员(
super\u admin\u用户
admin\u用户
标准用户
)的列表?在Rails控制台中,如果我尝试
Accounts::Account.first.users\u Account\u members
,我会得到以下结果:

2.4.0 :003 > Accounts::Account.first.users_account_members
Accounts::Account Load (0.6ms)  SELECT  "accounts_accounts".* FROM "accounts_accounts" ORDER BY "accounts_accounts"."id" ASC LIMIT $1  [["LIMIT", 1]]
NoMethodError: undefined method `users_account_members' for #<Accounts::Account:0x007fcb10cce7b8>
2.4.0 :004 > Accounts::Account.first.users_super_admin_users
Accounts::Account Load (0.6ms)  SELECT  "accounts_accounts".* FROM "accounts_accounts" ORDER BY "accounts_accounts"."id" ASC LIMIT $1  [["LIMIT", 1]]
ActiveRecord::StatementInvalid: PG::UndefinedColumn: ERROR:  column accounts_account_memberships.accounts_account_type does not exist
其中,通过查找
accounts\u account\u memberships.accounts\u account\u type
,当只有用户端是多态的时,似乎关联的
accounts\u account
端是多态的

此外,反过来说,我如何获得所有
帐户的列表
某个
超级管理员用户
(或
管理员用户
,或
标准用户
)是的成员

以下是我的关联类及其迁移:

module Accounts
  class Account < ApplicationRecord
    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', dependent: :destroy, foreign_key: :accounts_account_id
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: "Users::SuperAdminUser"
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: "Users::AdminUser"
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: "Users::StandardUser"

    def users_account_members
      self.users_super_admin_users + self.users_admin_users + self.users_standard_users
    end
  end
end

module Accounts
  class AccountMembership < ApplicationRecord
    belongs_to :accounts_account, class_name: 'Accounts::Account'
    belongs_to :users_account_member, polymorphic: true
  end
end

module Users
  class SuperAdminUser < ApplicationRecord
    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, as: :users_account_member
  end
end

module Users
  class AdminUser < ApplicationRecord
    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, as: :users_account_member
  end
end

module Users
  class StandardUser < ApplicationRecord
    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, as: :users_account_member
  end
end
app/models/accounts/account.rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
模块帐户
类帐户
app/models/users/super\u admin\u user.rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
模块用户
类超级管理员<应用程序记录
self.table_name='users\u super\u admin\u users'
拥有多个:帐户\u拥有的\u帐户,类别\u名称:'accounts::Account',相反的\u of::users\u Account\u owner,外部\u key::users\u Account\u owner\u id
拥有多个:帐户帐户成员资格,类名称:'accounts::AccountMembership',as::users\u account\u member,dependent::destroy
拥有多个:账户,通过::账户,来源:'accounts::account'
结束
结束
app/models/users/admin\u user.rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
模块用户
类AdminUser
app/models/users/standard_user.rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
模块用户
类StandardUser<应用程序记录
self.table\u name='users\u standard\u users'
拥有多个:帐户帐户成员资格,类名称:'accounts::AccountMembership',as::users\u account\u member,dependent::destroy
拥有多个:账户,通过::账户,来源:'accounts::account'
结束
结束
app/models/accounts/account\u membership.rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
模块帐户
类AccountMembership
db/migrate/20170203001000\u create\u users\u super\u admin\u user.rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
class CreateUsersSubperAdminUser
db/migrate/20170203001100\u create\u users\u admin\u user.rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
class CreateUsersAdminUser
db/migrate/20170203001200\u创建用户\u标准用户\u user.rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
class CreateUsersStandaduser
db/migrate/20170204001000\u创建账户\u账户.rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
class CreateAccountsAccount
db/migrate/20170204001100\u创建帐户\u帐户\u成员资格。rb

module Accounts
  class Account < ActiveRecord::Base

    self.table_name = 'accounts_accounts'

    belongs_to :users_account_owner, class_name: 'Users::SuperAdminUser', inverse_of: :accounts_owned_accounts
    accepts_nested_attributes_for :users_account_owner

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :accounts_account, dependent: :destroy
    has_many :users_super_admin_users, through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::SuperAdminUser'
    has_many :users_admin_users,       through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::AdminUser'
    has_many :users_standard_users,    through: :accounts_account_memberships, source: :users_account_member, source_type: 'Users::StandardUser'

  end
end
module Users
  class SuperAdminUser < ApplicationRecord

    self.table_name = 'users_super_admin_users'

    has_many :accounts_owned_accounts, class_name: 'Accounts::Account', inverse_of: :users_account_owner, foreign_key: :users_account_owner_id

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class AdminUser < ApplicationRecord

    self.table_name = 'users_admin_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Users
  class StandardUser < ApplicationRecord

    self.table_name = 'users_standard_users'

    has_many :accounts_account_memberships, class_name: 'Accounts::AccountMembership', as: :users_account_member, dependent: :destroy
    has_many :accounts_accounts, through: :accounts_account_memberships, source: 'Accounts::Account'

  end
end
module Accounts
  class AccountMembership < ActiveRecord::Base

    self.table_name = 'accounts_account_memberships'

    belongs_to :accounts_account, class_name: 'Accounts::Account', inverse_of: :accounts_account_memberships
    belongs_to :users_account_member, polymorphic: true

  end
end
class CreateUsersSuperAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_super_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersAdminUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_admin_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateUsersStandardUser < ActiveRecord::Migration[5.0]
  def change
    create_table :users_standard_users do |t|

      t.string :email, index: { unique: true }
      t.string :first_name
      t.string :last_name
      t.string :username, index: { unique: true }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccount < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_accounts do |t|

      t.string :name, index: { unique: true }

      t.references :users_account_owner, index: true, foreign_key: { to_table: :users_super_admin_users }

      t.timestamps null: false

    end
  end
end
class CreateAccountsAccountMembership < ActiveRecord::Migration[5.0]
  def change
    create_table :accounts_account_memberships do |t|

      t.references :accounts_account, index: { name: 'index_accts_acct_mbrships_on_accts_acct_id' }
      t.references :users_account_member, polymorphic: true, index: { name: 'index_accts_acct_mbrships_on_users_acct_member_type_and_id' }

      t.timestamps null: false

    end
  end
end
Users::SuperAdminUser.create(email: 'garnold0@spotify.com',      first_name: 'Gregory', last_name: 'Arnold',   username: 'garnold0')
Users::SuperAdminUser.create(email: 'lsanders1@time.com',        first_name: 'Lisa',    last_name: 'Sanders',  username: 'lsanders1')
Users::SuperAdminUser.create(email: 'ssanders2@ucsd.edu',        first_name: 'Scott',   last_name: 'Sanders',  username: 'ssanders2')
Users::SuperAdminUser.create(email: 'aroberts3@g.co',            first_name: 'Anthony', last_name: 'Roberts',  username: 'aroberts3')
Users::SuperAdminUser.create(email: 'probinson4@bandcamp.com',   first_name: 'Paula',   last_name: 'Robinson', username: 'probinson4')
Users::SuperAdminUser.create(email: 'ncruz5@huffingtonpost.com', first_name: 'Nicole',  last_name: 'Cruz',     username: 'ncruz5')
Users::SuperAdminUser.create(email: 'gandrews6@cyberchimps.com', first_name: 'George',  last_name: 'Andrews',  username: 'gandrews6')
Users::SuperAdminUser.create(email: 'nwilson7@deviantart.com',   first_name: 'Nicole',  last_name: 'Wilson',   username: 'nwilson7')
Users::SuperAdminUser.create(email: 'aedwards8@qq.com',          first_name: 'Anne',    last_name: 'Edwards',  username: 'aedwards8')
Users::SuperAdminUser.create(email: 'rdavis9@geocities.jp',      first_name: 'Ronald',  last_name: 'Davis',    username: 'rdavis9')

Users::AdminUser.create(email: 'lhawkinsa@icio.us',            first_name: 'Lisa',    last_name: 'Hawkins',  username: 'lhawkinsa')
Users::AdminUser.create(email: 'htaylorb@imdb.com',            first_name: 'Helen',   last_name: 'Taylor',   username: 'htaylorb')
Users::AdminUser.create(email: 'gtaylorc@unblog.fr',           first_name: 'Gregory', last_name: 'Taylor',   username: 'gtaylorc')
Users::AdminUser.create(email: 'hlaned@whitehouse.gov',        first_name: 'Henry',   last_name: 'Lane',     username: 'hlaned')
Users::AdminUser.create(email: 'hphillipse@howstuffworks.com', first_name: 'Harry',   last_name: 'Phillips', username: 'hphillipse')
Users::AdminUser.create(email: 'jgonzalesf@com.com',           first_name: 'Jeffrey', last_name: 'Gonzales', username: 'jgonzalesf')
Users::AdminUser.create(email: 'ljamesg@sfgate.com',           first_name: 'Lori',    last_name: 'James',    username: 'ljamesg')
Users::AdminUser.create(email: 'rhillh@gnu.org',               first_name: 'Roger',   last_name: 'Hill',     username: 'rhillh')
Users::AdminUser.create(email: 'rharveyi@tripadvisor.com',     first_name: 'Raymond', last_name: 'Harvey',   username: 'rharveyi')
Users::AdminUser.create(email: 'sperryj@mit.edu',              first_name: 'Stephen', last_name: 'Perry',    username: 'sperryj')

Users::StandardUser.create(email: 'mblackk@prnewswire.com',       first_name: 'Michelle',   last_name: 'Black',     username: 'mblackk')
Users::StandardUser.create(email: 'ghamiltonl@sciencedirect.com', first_name: 'Gary',       last_name: 'Hamilton',  username: 'ghamiltonl')
Users::StandardUser.create(email: 'cgraym@about.com',             first_name: 'Chris',      last_name: 'Gray',      username: 'cgraym')
Users::StandardUser.create(email: 'jbradleyn@wikispaces.com',     first_name: 'Jacqueline', last_name: 'Bradley',   username: 'jbradleyn')
Users::StandardUser.create(email: 'jpayneo@netscape.com',         first_name: 'Joseph',     last_name: 'Payne',     username: 'jpayneo')
Users::StandardUser.create(email: 'drodriguezp@apache.org',       first_name: 'Debra',      last_name: 'Rodriguez', username: 'drodriguezp')
Users::StandardUser.create(email: 'jkellyq@alexa.com',            first_name: 'Jonathan',   last_name: 'Kelly',     username: 'jkellyq')
Users::StandardUser.create(email: 'creynoldsr@wired.com',         first_name: 'Cheryl',     last_name: 'Reynolds',  username: 'creynoldsr')
Users::StandardUser.create(email: 'kbarness@pbs.org',             first_name: 'Kathleen',   last_name: 'Barnes',    username: 'kbarness')
Users::StandardUser.create(email: 'ahansent@chron.com',           first_name: 'Annie',      last_name: 'Hansen',    username: 'ahansent')

Accounts::Account.create(name: 'Ooba',        users_account_owner_id: 1)
Accounts::Account.create(name: 'Avamba',      users_account_owner_id: 2)
Accounts::Account.create(name: 'Linktype',    users_account_owner_id: 3)
Accounts::Account.create(name: 'Brainsphere', users_account_owner_id: 4)
Accounts::Account.create(name: 'Wordtune',    users_account_owner_id: 5)

Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 1)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 2)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 3)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 4)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 5)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 6)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 7)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 8)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 1, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 2, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 9)
Accounts::AccountMembership.create(accounts_account_id: 3, users_account_member_type: 'Users::SuperAdminUser', users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 4, users_account_member_type: 'Users::AdminUser',      users_account_member_id: 10)
Accounts::AccountMembership.create(accounts_account_id: 5, users_account_member_type: 'Users::StandardUser',   users_account_member_id: 10)
class CreateAccountsAccountMembership
要使用这种多态关联,您必须在AccountMembership中声明一个类型列