Cách tốt nhất để triển khai chèn/cập nhật nguyên tử cho mô hình có bộ đếm trong Rails là gì? Sự tương tự tốt cho vấn đề tôi đang cố gắng giải quyết là một bộ đếm "như" với hai trường:chèn hoặc tăng nguyên tử trong ActiveRecord/Rails
url : string
count : integer
Khi chèn, nếu hiện tại không có bản ghi với url phù hợp, một bản ghi mới sẽ được tạo với số 1; nếu không, trường count
của bản ghi hiện tại sẽ được tăng lên.
Ban đầu tôi đã cố gắng mã như sau:
Like.find_or_create_by_url("http://example.com").increment!(:count)
Nhưng gì ngạc nhiên khi các SQL kết quả cho thấy rằng SELECT
xảy ra bên ngoài UPDATE
giao dịch:
Like Load (0.4ms) SELECT `likes`.* FROM `likes` WHERE `likes`.`url` = 'http://example.com' LIMIT 1
(0.1ms) BEGIN
(0.2ms) UPDATE `likes` SET `count` = 4, `updated_at` = '2013-01-17 19:41:22' WHERE `likes`.`id` = 2
(1.6ms) COMMIT
Có một thành ngữ Rails để đối phó với này, hoặc tôi cần phải thực hiện điều này ở cấp độ SQL (và do đó mất một số tính di động)?
4 năm sau, vẫn đang tìm câu trả lời phù hợp/được cộng đồng hỗ trợ. –