在我的模型中,项目拥有并属于许多用户,因此他们有一个连接表 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_id
和 user_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/