给定guid
和value
。如果存在guid
的记录,请更新其value
。否则,请使用guid
和value
创建新记录。无论哪种情况,都要返回记录,以便我可以获得其主键id
。
如何做到这一点:
答案 0 :(得分:4)
最简单的事情可能是
object = Model.find_or_initialize_by_guid(guid)
object.update_attributes :value => value
总是进行2次查询(查找和插入/更新)
如果您提前知道碰撞不太可能,那么
begin
Model.create(:guid => guid, :value => value)
rescue ActiveRecord::RecordNotUnique
# find and update existing record
end
这需要guid列上的唯一索引。它在更新案例中需要3个查询,但在创建案例中只需要1个查询。
这一切都假设我们正在谈论SQL - 其他数据存储区,例如mongodb,具有upsert(更新或插入)操作的概念
答案 1 :(得分:1)
此代码将找到一个value = params [:guid]的对象。如果找到该对象,它将返回该对象,否则它将实例化一个新对象,但尚未保存。
your_object = YOU_MODEL.find_or_initialize_by(params[:guid])