Ruby on rails 4 在Rails 4中插入或更新
我有一个Rails 4应用程序,我正在与其他系统集成。每天我们都需要导入他们的数据库。部分或大部分数据应该已经导入到我们的数据库中(从以前的加载) 当我们尝试在数据库中插入现有对象时,如下所示:Ruby on rails 4 在Rails 4中插入或更新,ruby-on-rails-4,Ruby On Rails 4,我有一个Rails 4应用程序,我正在与其他系统集成。每天我们都需要导入他们的数据库。部分或大部分数据应该已经导入到我们的数据库中(从以前的加载) 当我们尝试在数据库中插入现有对象时,如下所示: ... region = Region.new(id: id, name: name) region.save 我们得到这个错误: ActiveRecord::RecordNotUnique (Mysql2::Error: Duplicate entry '1' for key 'PRIMARY':
...
region = Region.new(id: id, name: name)
region.save
我们得到这个错误:
ActiveRecord::RecordNotUnique (Mysql2::Error: Duplicate entry '1' for key 'PRIMARY':
我认为save方法在记录不存在时创建,或者在记录存在时更新。我错过了什么?我应该先在数据库中找到对象吗?比如:
region = Region.find(id)
if region
#update fields
else
#create region
end
region.save
是否有一种更好、更有效、性能更好(考虑到将有数千条记录)的优雅Rails方法可以做到这一点?我建议使用
find\u或\u initialize\u by
方法:
region = Region.find_or_initialize_by(id: id)
// do stuff
region.save
find\u或\u initialize\u by
的工作原理
# File activerecord/lib/active_record/relation.rb, line 200
def find_or_initialize_by(attributes, &block)
find_by(attributes) || new(attributes, &block)
end
要小心,因为
find
方法必须找到记录,否则会引发异常
按id查找-可以是特定id(1)、id列表(1、,
5、6)或ID数组([5、6、10])如果找不到的记录
所有列出的ID,然后RecordNotFound将被提升。如果
主键是一个整数,按id查找强制使用
对我来说