Ruby:如何在fixture中配置枚举?

Ale*_*ein 5 ruby enums unit-testing ruby-on-rails fixtures

鉴于此类:

class User < ActiveRecord::Base

enum permission: {
    permission_user: 1,
    permission_staff: 2,
    permission_manager: 3,
    permission_admin: 4,
    permission_super_admin: 5
}
Run Code Online (Sandbox Code Playgroud)

我想创建一个看起来像这样的夹具:

testuser1:
  id: 1
  username: sam
  permission: :permission_staff
Run Code Online (Sandbox Code Playgroud)

我已经尝试了许多语法变体,但没有找到有用的东西.结果user.permission是nil或0.我知道枚举是相对较新的添加.可以这样做吗?

Tar*_*ast 14

根据enum文档,您可以通过类引用可枚举,如下所示:

User.permissions[:permission_staff]
Run Code Online (Sandbox Code Playgroud)

而工厂只是红宝石代码 - 所以他们应该能够以同样的方式访问价值

testuser1:
  id: 1
  username: sam
  permission:  <%= User.permissions[:permission_staff] %>
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这仅在模型中的枚举定义值时才有效。如果它们是动态定义的,例如“枚举权限:[:permission_user,:permission_staff,...]”,则夹具无法获取该值。 (3认同)