正确使用Sequel的save()?如何创建新的或更新现有记录?

时间:2013-04-06 08:54:33

标签: ruby orm sequel

Sequel gem有save方法“创建或更新记录”。我正在尝试使用它来创建新记录,如果不存在,或更新现有记录的字段:

record = Records.where(:name => 'Dark Side of the Moon').first
record.save(:artist => "Pink Floyd")

这失败了,因为Records.where(:name => 'Dark Side of the Moon')返回nil,而不是空的Record对象。基本上,我将此方法用作upsert,并且它不会以这种方式工作,因为save方法是一个模型实例方法。

我的问题有两个:(1)使用save的正确方法是什么,(2)Sequel是否有一种“upserting”记录的方式?

2 个答案:

答案 0 :(得分:3)

如果您有模型实例,则只能使用Model#save。如果数据库中已有一个新模型实例(返回nil时),则可以通过创建新模型实例来实现此目的。

record = Records[:name => 'Dark Side of the Moon'] || Records.new(:name => 'Dark Side of the Moon')
record.save(:artist => "Pink Floyd")

答案 1 :(得分:1)

record.save(:artist => "Pink Floyd")对我不起作用,但是

record.artist = "Pink Floyd"
record.save

运作良好。这可能是续集4.16.0中的一个错误。