【发布时间】:2014-06-06 14:24:13
【问题描述】:
我正在使用 Ruby on Rails 4,在 before_create 回调中,我想让它覆盖现有记录,而不是在数据库中创建新记录。也就是说,例如,当我尝试创建新记录时,我有 10 条记录存储到数据库表中,那么第 11 条记录应该覆盖最旧的记录,而不是创建新记录。
我尝试了以下代码:
before_create do
if more_than_ten?
# Overwriting oldest record
oldest_record = self.class.order(:created_at).first
self.id = oldest_record.id
else
true
end
end
但我收到此错误:
ActiveRecord::RecordNotUnique (Mysql2::Error: Duplicate entry '1' for key 'PRIMARY': INSERT INTO ...)
如何覆盖最旧的记录而不是创建新记录?
【问题讨论】:
-
如果存在超过 10 个,您不能只查询新的并重定向到最旧的编辑操作吗?
-
@Baloo - 我认为您指的是控制器操作,但在这种情况下,这是一个模型问题。
-
我是,为什么是模型问题?如果超过 10 个,则获取最旧的并让他们进行编辑。
-
@Baloo - 说来话长……基本上,我想确保条件。
标签: ruby-on-rails ruby activerecord ruby-on-rails-4 callback