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”记录的方式?
答案 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
中的一个错误。