Ruby on rails SQLite3::ConstraintException:约束失败:插入Rails中的联接模型
在我的模型中,项目拥有并属于许多用户,因此有一个连接表projects\u users供他们使用。当我插入行时Ruby on rails SQLite3::ConstraintException:约束失败:插入Rails中的联接模型,ruby-on-rails,sqlite,activerecord,Ruby On Rails,Sqlite,Activerecord,在我的模型中,项目拥有并属于许多用户,因此有一个连接表projects\u users供他们使用。当我插入行时 @project.members += User.find params[:member_ids].split(',') 在项目控制器的创建操作中,我无法保存@project。当我尝试时,会出现以下错误: SQLite3::ConstraintException: constraint failed: INSERT INTO "projects_users" ("project_id
@project.members += User.find params[:member_ids].split(',')
在项目控制器的创建操作中,我无法保存@project。当我尝试时,会出现以下错误:
SQLite3::ConstraintException: constraint failed: INSERT INTO "projects_users" ("project_id", "user_id") VALUES (5, 14600)
但是,在保存之前,@project是有效的,@project.members返回正确的成员。我做错了什么?听起来您可能在DB列上有一个唯一的约束,它不允许在
项目用户中重复项目id
和用户id
对,但Rails没有意识到这一点,因此验证通过,但实际保存失败
如果是这种情况,您可以通过
关系和连接表的模型使用has\u many
,并验证唯一性。我怀疑你已经做了其中的一部分。类似这样的事情可能会有所帮助:
class Project < ActiveRecord::Base
has_many :members
has_many :users, through: :project_membership
end
class User < ActiveRecord::Base
has_many :projects, through: :project_membership
end
class ProjectMembership < ActiveRecord::Base
self.table_name = "projects_users"
belongs_to :project
belongs_to :user
validates :project_id, uniqueness: { scope: :user_id }
end
class项目
如果一切正常,您可能需要将projects\u users
表重命名为project\u memberships
,如上例所示;然后,您可以放弃self.table\u name
听起来您可能在DB列上有一个唯一的约束,该约束不允许在projects\u users
中重复项目id
和用户id
对,但Rails没有意识到它,因此验证通过,但实际保存失败
如果是这种情况,您可以通过
关系和连接表的模型使用has\u many
,并验证唯一性。我怀疑你已经做了其中的一部分。类似这样的事情可能会有所帮助:
class Project < ActiveRecord::Base
has_many :members
has_many :users, through: :project_membership
end
class User < ActiveRecord::Base
has_many :projects, through: :project_membership
end
class ProjectMembership < ActiveRecord::Base
self.table_name = "projects_users"
belongs_to :project
belongs_to :user
validates :project_id, uniqueness: { scope: :user_id }
end
class项目
如果一切正常,您可能需要将projects\u users
表重命名为project\u memberships
,如上例所示;然后您可以放弃self.table\u name
我如何找到数据库上的唯一约束?我查看了迁移和模式,没有看到这个约束,也没有在任何地方指定它。除此之外,我没有插入重复的项目id和用户id对,每个用户id都是唯一的。虽然我不明白我违反了什么约束,但这个答案确实有效。似乎HABTM关系在Rails中越来越不受支持。我怎样才能找到db上的唯一约束?我查看了迁移和模式,没有看到这个约束,也没有在任何地方指定它。除此之外,我没有插入重复的项目id和用户id对,每个用户id都是唯一的。虽然我不明白我违反了什么约束,但这个答案确实有效。似乎HABTM关系在Rails中越来越不受支持。