我想更新Lecture(id, name, etc.)
表中的一些数据。
例如,id: 1, name: "first"
中有一个数据(Lecture
)。
当我输入Lecture.create(id: 1, name: "newer")
=>
PG::UniqueViolation: ERROR: duplicate key value violates unique constraint "lectures_pkey"
有没有办法更新数据?
答案 0 :(得分:2)
试试这个:
linha\[0]\s=\s'13SL(.*)';
在此处查找有关更新的更多信息:http://guides.rubyonrails.org/active_record_basics.html#update
它不起作用的原因是因为id是唯一的。当你使用create时,它试图创建一个id为1的新记录,而不是编辑相同的记录。
答案 1 :(得分:2)
PG :: UniqueViolation:错误:重复键值违反唯一 约束“lectures_pkey”
Lecture.find(1).update(name: "newer")
是默认 主键 ,不应 已更改 或 复制 即可。当您插入具有现有ID的行时,您会收到该错误。
相反,您需要执行以下操作。
id
答案 2 :(得分:1)
您可以使用
lec = Lecture.find(1)
lec.update_attributes(姓名:"更新")
您收到错误 PG :: UniqueViolation:错误:重复键值违反了唯一约束" lectures_pkey" ,因为您无法创建具有相同ID的记录。 Id是表格中的主键。
答案 3 :(得分:0)
如果您不介意加载记录然后更新记录,那么所有当前答案都是正确的。如果您不需要实际加载记录,只想更新数据库中的数据,则可以执行
Lecture.where(id: 1).update_all(name: "newer")
这将跳过所有验证等,只需对id == 1
的记录数据库中的数据进行直接sql更新