2014-05-05 50 views
1

可以說我有一個型號ProductRails:檢查DB中是否存在新記錄的最有效方法

偶爾我得到一個包含新產品的文件,問題是其中一些文件可能已經輸入到數據庫中。

數據不包含任何唯一鍵,並且可以使用不同的字段以不同的結構進行結構化。我可以做的是根據我擁有的所有數據從數據庫中選擇,如果找到產品,則不要從文件中保存該數據。

Product.where(:name => p.name, :desc => p.desc, :source => "some source", [more fields]) 

所以我的問題是,如果有更好的方式鐵軌檢查記錄已經存在?

插入失敗的一些獨特的關鍵,是不是一個好主意國際海事組織,但也可以工作。

+2

添加桌子上的「獨一無二的鑰匙」永遠是一種高效且最值得推薦的方式。而且它也讓你的生活更輕鬆。相信我。 – Pavan

+1

除了首先查看記錄以外,還有其他方法是否知道記錄是否存在?這種方法有什麼問題嗎?它是否需要太長時間?唯一性問題是您想要解決的問題,還是您試圖解決緩慢/設計問題?你的產品沒有UPC或其他什麼指定它們是唯一的? – jefflunt

+0

對不起,我錯過了'rails'這個詞。我的問題是否有一個更好的軌道方式來檢查這個選擇或插入可能是唯一的概念性方式來做到這一點... – SimonW

回答

3

可以使用exist?功能是這樣的:

if Product.where(:name => p.name, :desc => p.desc, :source => "some source", [more fields]) 
    # do something 
else 
    # do something else 
end 

您也可以使用find_or_create_by如果你的目標是,如果它不存在,這樣創造一個新的紀錄:

Product.find_or_create_by(:name => p.name, :desc => p.desc, :source => "some source", [more fields]) 
+1

'find_or_create_by'是一種方式去這裏。 – Pavan

+0

按照你的建議,我使用了'find_or_initialize_by',因爲我不想立即創建記錄。謝謝! – SimonW

相關問題