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
.
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
关系,它就会有这个名称,如 created_at
列,如果关系是 has_and_belongs_to_many
.
由于 rails fixtures 在关系使用 :through
时不支持方便的语法我必须将关系 fixtures 放在 roles_permissions.yml 文件中或者我必须简化关系我的模型使用 has_and_belongs_to_many
.