Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails SQLite3::ConstraintException:约束失败:插入Rails中的联接模型_Ruby On Rails_Sqlite_Activerecord - Fatal编程技术网

Ruby on rails SQLite3::ConstraintException:约束失败:插入Rails中的联接模型

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

在我的模型中,项目拥有并属于许多用户,因此有一个连接表projects\u users供他们使用。当我插入行时

@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中越来越不受支持。