rails YAML:加入 NOT NULL 约束失败 table

rails YAML: NOT NULL constraint failed in joining table

Rails 4.2 我已经建立了一个 Role 模型和一个 Permission 模型,它们通过另一个模型相互关联多对多 RolesPermission 我使用 has_many:through 关联模型。

RolesPermission 有一个 table 名称 permissions_roles 因为 我用迁移从 roles_permissions 重命名了它,我把它放在型号 class:

self.table_name = "permissions_roles"

我设置了测试用具

在roles.yml我有

admin:
  name: admin
  permissions: create_user

在permissions.yml我有

create_user:
  name: create_user
  description: Create a new user

edit_user:
  name: edit_user
  description: Edit any user details

view_all_users:
  name: view_all_users
  description: View all users

现在,当我 运行 rake test 每次测试都会出现此错误:

ActiveRecord::StatementInvalid:     
ActiveRecord::StatementInvalid: 
SQLite3::ConstraintException: NOT NULL constraint failed:
permissions_roles.created_at: INSERT INTO "permissions_roles" ("role_id", "permission_id") VALUES (135138680, 204622624)

当我从 YAML 中删除管理员角色的权限时,错误消失了。

怎么回事?

编辑

连接 table 在模式中看起来像这样:

create_table "permissions_roles", force: :cascade do |t|
  t.integer  "role_id"
  t.integer  "permission_id"
  t.datetime "created_at",    null: false
  t.datetime "updated_at",    null: false
end

create_user权限中填写created_at。您可能破坏了字段 created_at(不能为空)的数据库级别验证。

SQLite3::ConstraintException: NOT NULL constraint failed: permissions_roles.created_at:

我逐渐得出结论,我想做的事情不可能按照我想做的方式做。

我看到在 rails 固定装置中我无法利用 ActiveRecord 中使用 :through 标签

的关系

首先,它为连接假定了一个特定名称这一事实证明了这一点 table,如果它是一个 has_and_belongs_to_many 关系,它就会有这个名称,如 中所示],其次 this 问题表明它还假设连接 table 没有 created_at 列,如果关系是 has_and_belongs_to_many.

由于 rails fixtures 在关系使用 :through 时不支持方便的语法我必须将关系 fixtures 放在 roles_permissions.yml 文件中或者我必须简化关系我的模型使用 has_and_belongs_to_many.