实现用户角色及其唯一列

时间:2015-01-21 04:25:13

标签: ruby-on-rails ruby-on-rails-4 rails-activerecord

我正在创建一个应用程序,其中有3种不同类型的用户。每个用户类型只有2-3个相同的列和4-5列,这些列对于该用户类型是唯一的。

用户类型示例:

Admin
Coach
Player

我最初的方法是使用列User创建admin, coach, player表。这些列是布尔值,定义用户是否具有某些角色。管理员会将admin发送到true,将所有其他列设为false。

如果我们所有用户都有相同的列,如用户名,密码等,这样可以正常工作。当我们引入某些用户类型独有的其他列时,问题就出现了。让我们说所有玩家都需要有地址。我们为用户表提供了以下列:

id
username
password
admin
coach
player
city
address
apartment
zip
etc...

对于播放器,这些列将被填充,但对于Admin和Coach,这些值将为null。

我的第二个想法是将User表保留为所有用户类型共有的值:

id
username
password
admin
coach
player

然后创建仅为特定用户类型填充的新表:

class AdminProperties < ActiveRecord::Base
    belongs_to :users
end

class CoachProperties < ActiveRecord::Base
    belongs_to :users
end

class PlayerProperties < ActiveRecord::Base
    belongs_to :users
end

使用多个用户角色和特定用户独有的列对此类应用进行建模的最佳做法是什么?谢谢。

1 个答案:

答案 0 :(得分:0)

我建议采用第二种方法将用户提取到不同的表格中,然后关联每个 admin coach 玩家和他们一起。

class User < ActiveRecord::Base
  ...
end

class Coach < ActiveRecord::Base
  belongs_to :user
  ...
end

它不仅有助于保持代码干燥,还可以让您灵活地修改子表格。