1
根據this(舊)後這些Rails 3發現者有競爭條件。類似於ActiveRecord動態基於屬性的發現者是線程安全的嗎?
User.find_or_create_by_username(:username => 'uuu', :password => 'xxx')
根據帖子可能會在某些條件下創建兩條記錄。
這對於Rails 3.0+還是相關的嗎?謝謝
根據this(舊)後這些Rails 3發現者有競爭條件。類似於ActiveRecord動態基於屬性的發現者是線程安全的嗎?
User.find_or_create_by_username(:username => 'uuu', :password => 'xxx')
根據帖子可能會在某些條件下創建兩條記錄。
這對於Rails 3.0+還是相關的嗎?謝謝
是的。在執行第一條語句和創建對象的時間量中,可以並行執行第二條語句。 沒有排他鎖。
防止這種情況的最好方法是在模型中添加一個唯一驗證,並在數據庫中添加一個唯一索引。這樣,如果您嘗試使用相同的字段創建兩條記錄,則數據庫將引發錯誤。
謝謝。我認爲他們改變了它,因爲active_record/dynamic_finder_match.rb是新的。 – lzap 2011-05-24 08:59:35
還有一個問題 - 感嘆號版本是不可能的。有沒有一種方法可以強制這些在創建時報告錯誤? – lzap 2011-05-24 09:14:00