gpt4 book ai didi

ruby-on-rails - SQLite3::ConstraintException:约束失败:在 Rails 中插入 INTO 连接模型

转载 作者:行者123 更新时间:2023-12-03 19:52:26 24 4
gpt4 key购买 nike

在我的模型中,项目拥有并属于许多用户,因此他们有一个连接表 projects_users。当我插入线

@project.members += User.find params[:member_ids].split(',')

进入项目 Controller 的创建操作,我无法保存@project。当我尝试时,我收到以下错误:
SQLite3::ConstraintException: constraint failed: INSERT INTO "projects_users" ("project_id", "user_id") VALUES (5, 14600)

但是,就在保存之前,@project 有效并且@project.members 返回正确的成员。我究竟做错了什么?

最佳答案

听起来您可能对 DB 列有一个不允许重复的唯一约束 project_iduser_id projects_users 中的对,但 Rails 不知道,因此验证通过,但实际保存失败。

如果是这种情况,您可以使用 has_many through关系和连接表的模型并验证唯一性。我怀疑你已经在做其中的一部分了。这样的事情可能会有所帮助:

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

您可能想要重命名您的 projects_users如果这一切都解决了,请使用表,例如 project_memberships如上例;那么你可以放弃 self.table_name .

关于ruby-on-rails - SQLite3::ConstraintException:约束失败:在 Rails 中插入 INTO 连接模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15463598/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com