ด้วยเหตุผลบางประการ โค้ดนี้จึงสามารถสร้างเกมที่ซ้ำกันหากผู้ใช้ที่แตกต่างกันเรียกใช้ในเวลาเดียวกัน:
game = Game.find_or_create_by(
status: Game::STATUS[:waiting],
category_id: params[:category_id],
private: 0
) do |g|
is_new = true
g.user = current_user
end
ฉันไม่สามารถเข้าใจได้อย่างชัดเจนว่าเกิดอะไรขึ้น แต่อาจเกี่ยวกับกระบวนการ Unicorn ที่แตกต่างกันซึ่งใช้การเชื่อมต่อฐานข้อมูลที่แตกต่างกัน เพื่อให้ธุรกรรมสามารถทำงานแบบขนานได้
ถ้าเป็นเช่นนั้น ฉันต้องการวิธีที่ถูกต้องเพื่อหลีกเลี่ยง บางทีฉันควรใช้ธุรกรรม Rails หรือการล็อค Postgres แต่ฉันต้องการตัวอย่างการใช้งานจริงๆ
ขอบคุณ
is_new
ใช้ในโค้ดต่อไปนี้ โปรดทราบว่าเพิ่งสร้างเรกคอร์ด - person Alexander Zinchuk   schedule 22.05.2014