2011-12-02 31 views
2

創建我使用這個代碼後的紀錄是新的:有沒有辦法判斷它已經與find_or_create_by

item = Item.find_or_create_by(:name => title.strip) 
if item.changed? 
    results.newItemsCount += 1 
end 

我想要得到的新創建的記錄記錄計數。我希望.changed屬性對於新創建的項目是正確的,但看起來不是這樣。代碼的下一部分可能會修改該項目,即使它不是新的,所以如果該項目是新的,我真的需要知道。

有沒有辦法判斷記錄是否是新的?沒有看到類似的東西in the docs。你會認爲只要設置標題(在構造函數中)就會有變化,但看起來好像不會發生。

回答

6

我不認爲它有可能找到是否查找或創建使用changed?persisted?方法。

相反,您可以通過find_or_initialize_by來做到這一點。在這裏你可以檢查persisted?的值以確定該項目是否新增。如果它是假的,那麼你知道它是一個新的文件。

item = Item.find_or_initialize_by(:name => title.strip) 
unless item.persisted? 
    item.save 
    results.newItemsCount += 1 
end 

另一種方法是你可以使用after_create回調。如果它的一個新項目,這個回調將被觸發。你可以在這裏做你的操作。

希望它有幫助

+1

非常有幫助,謝謝。這篇文章不太清楚。 – jcollum

相關問題