ruby-on-rails - 实现用户角色及其独特的列

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

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

用户类型示例:

Admin
Coach
Player

我最初的方法是创建包含列admin、coach、playerUser 表。这些列是定义用户是否具有特定角色的 bool 值。管理员会将 admin 设置为 true,并将所有其他列设置为 false。

如果我们所有的用户都有相同的列,如用户名、密码等,这就可以正常工作。当我们引入对某些用户类型唯一的其他列时,问题就会出现。假设所有玩家都需要有地址。我们有用户表的这些列:

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

对于球员,这些列将被填充,但对于管理员和教练,这些值将为空。

我的第二个想法是在 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

为这种类型的应用程序建模的最佳做法是什么,其中包含多个用户角色和特定用户独有的列?谢谢。

最佳答案

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

class User < ActiveRecord::Base
  ...
end

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

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

关于ruby-on-rails - 实现用户角色及其独特的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28059603/

相关文章:

ruby-on-rails - rails 4 : how to use OR between conditions on find methods

ruby-on-rails - Heroku 迁移失败 UndefinedTable 错误

ruby-on-rails - 使用 OR 组合多个命名范围

ruby-on-rails - 在 Rails 中,我可以通过委托(delegate)方法对查询进行排序吗?

ruby-on-rails - 切换到 Ruby 2.3.0(从 2.0.0 开始)会在 Active Record 验证上产生问题

ruby-on-rails - has_many 关联属性 setter 是否始终将其值保存到数据库中,是否可以不这样做?

ruby-on-rails - Ruby on Rails 3 教程

ruby-on-rails - 如何使用 rspec 检查/测试 json 中的特定字段

ruby-on-rails - 301 重定向 Rails 4 总是转到主页

ruby-on-rails - 缓存相关的 ActiveRecord 对象以供收集