ruby-on-rails - 向 ActiveRecord 枚举字段添加属性

标签 ruby-on-rails activerecord

我的 Rails 4 应用程序中有 User 模型。它包含 account_type 的枚举

class User < ActiveRecord::Base
  enum account_type: [manager: 0, contractor: 1, employee: 2]
end

目前 account_type 用于修改多个操作的行为。但在未来,我将需要引入几个属性,这些属性将针对不同的帐户类型具有不同的值(例如,某些 API 端点的速率限制或订阅价格)。

我该如何处理?

我可以添加新的模型 UserAccountType 模型并设置 belongs_to-has_many 它和 User 模型之间的关联链接,但我将无法访问 manager? 等方法,这些方法由 ActiveRecord 方便地提供。此外,我还必须适本地为相关表设置种子,这意味着我必须在 seeds.rb 中放置映射“帐户类型”<--> 整数,并确保它为所有帐户类型创建记录也不干燥。有没有办法做得更好?

最佳答案

看起来您正在寻找一个简单的角色系统。 Rolify gem 非常适合:https://github.com/RolifyCommunity/rolify .在包含的内容之上添加其他便利方法也很容易。

已经有足够多的人尝试解决这个问题,以至于出现了一些模式。例如,您确定在项目生命周期内每个用户一个角色就足够了吗?您可能需要数组类型(或一对多)而不是枚举。

如果您想自己实现它,如果您使用的是 Postgres,则数组字段类型可能是存储和添加“角色”的好方法。至于方便的方法,你可以替换像 is_manager 这样的东西吗?在几行中。我不会因此而阻止您创建更合适、更可持续的数据模型。

例子:

def is_manager?
  User.find(1).roles.include?('manager')
end

关于ruby-on-rails - 向 ActiveRecord 枚举字段添加属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34456017/

相关文章:

ruby-on-rails - 在有状态对象上记录数据的最佳模式是什么?

mysql - 在开发环境中使用Mysql原生函数和ActiveRecord

ruby-on-rails - ActiveRecord 为 has_many 生成的错误 sql :through relation with STI

validation - 如何使用 ActiveRecord 中的复合键验证模型?

ruby-on-rails - 有没有办法在一行中有条件地添加到数组?

javascript - 在 .erb 文件中内联 <% f.submit %> 样式

ruby-on-rails - Rails 3 事件管理员。根据 CanCan 权限隐藏按钮

ruby-on-rails - 使用 simplecov 进行最小测试

ruby-on-rails - Rails/paperclip 的新手 - Paperclip 不会保存

ruby-on-rails - 事件记录 : Hide column while returning object