Tôi đang cố gắng thực thi tính duy nhất của các giá trị trong một trong các trường bảng của tôi. Thay đổi bảng không phải là một lựa chọn. Tôi cần phải sử dụng ActiveRecord để có điều kiện chèn một hàng vào bảng nhưng tôi lo lắng về việc đồng bộ hóa.Điều kiện chủng tộc trong Rails first_or_create
Có first_or_create
trong Rails ActiveRecord ngăn chặn điều kiện chủng tộc không?
Đây là mã nguồn cho first_or_create
từ GitHub:
def first_or_create(attributes = nil, options = {}, &block)
first || create(attributes, options, &block)
end
Có thể rằng một mục trùng lặp sẽ cho kết quả trong cơ sở dữ liệu do các vấn đề đồng bộ hóa với nhiều quy trình?
AR có đầy đủ các điều kiện chủng tộc như thế này. – dbenhur
Xem (SO dup) [Làm cách nào để tránh tình trạng cuộc đua trong ứng dụng Rails của tôi?] (Http://stackoverflow.com/questions/3037029/how-do-i-avoid-a-race-condition-in-my -rails-app) và Rails Cookbook [Tránh điều kiện chủng tộc với khóa lạc quan] (http://underpop.free.fr/r/ruby-on-rails/cookbook/I_0596527314_CHP_3_SECT_19.html) – dbenhur
@dbenhur - Tôi không thể sử dụng khóa lạc quan vì nó liên quan đến việc thêm một trường vào bảng. Một trong những điều kiện của tôi là tôi không thể thêm một trường để nó không trùng lặp. –