【问题标题】:Ruby: How do you configure an enum in a fixture?Ruby:如何在夹具中配置枚举?
【发布时间】:2015-05-31 04:53:59
【问题描述】:

鉴于这个类:

class User < ActiveRecord::Base

enum permission: {
    permission_user: 1,
    permission_staff: 2,
    permission_manager: 3,
    permission_admin: 4,
    permission_super_admin: 5
}

我想创建一个如下所示的夹具:

testuser1:
  id: 1
  username: sam
  permission: :permission_staff

我尝试了多种语法变体,但没有找到可行的方法。生成的 user.permission 为 nil 或 0。我知道 enum 是相对较新的添加。这可以做到吗?

【问题讨论】:

  • 也许可以试试:User.permissions[:permission_staff]? (注意:我完全在猜测,但如果它是可枚举的......它应该可以作为可枚举访问)

标签: ruby-on-rails ruby unit-testing enums fixtures


【解决方案1】:

根据enum docs,您可以像这样通过类引用枚举:

User.permissions[:permission_staff]

工厂只是 ruby​​ 代码 - 所以它们应该能够以相同的方式访问值

testuser1:
  id: 1
  username: sam
  permission:  <%= User.permissions[:permission_staff] %>

【讨论】:

  • 似乎合乎逻辑,但它不起作用。无论括号中使用哪个符号,所有权限值都设置为零
  • 对不起,那应该是erbified。固定
  • 谢谢。这样可行。永远不要把 yml 像 erb 文件一样处理
  • 请注意,这仅在模型中的枚举定义值时才有效。如果它们是动态定义的,例如enum permission: [ :permission_user, :permission_staff, ...],则夹具无法获取值。
  • 注意 User.permissions[:permission_staff] 中的复数形式。我花了一些时间来解决这个问题
猜你喜欢
  • 1970-01-01
  • 2010-09-09
  • 2018-02-23
  • 2020-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-18
相关资源
最近更新 更多