2013-04-06 36 views
2

續集寶石有一個「創建或更新記錄」的方法save。我試圖用它來創建一個新的記錄,當它不存在一個,或更新領域的現有記錄:正確使用續集的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,而不是一個空的記錄對象。實質上,我使用這種方法作爲upsert,並且它不以這種方式工作,因爲save方法是模型實例方法。我的問題是雙重的:(1)使用save的正確方法是什麼?(2)Sequel有沒有辦法「插入」記錄?

回答

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") 
+2

同樣相關的是Sequel的[Model#find_or_create](http://sequel.rubyforge.org/rdoc/classes/Sequel/Model/ClassMethods.html#method-i- find_or_create)方法。 – Phrogz 2013-04-07 21:11:07

+0

'record.save(:artist =>「Pink Floyd」)'不適合我。 record.artist =「Pink Floyd」 record.save 適合我。 它可能是一個在續集(4.16.0) – 2016-02-14 12:24:17

1

record.save(:artist => "Pink Floyd")並沒有爲我工作,但

record.artist = "Pink Floyd" 
record.save 

運作良好。這可能是Sequel 4.16.0中的一個錯誤。

相關問題