2011-10-24 39 views
5

Cố gắng tìm hiểu xem sự tương tranh được xử lý như thế nào trong Ruby On Rails.Đồng thời cơ sở dữ liệu an toàn trong ROR

Làm cách nào để có được một đoạn mã để khóa trên các dòng trong cơ sở dữ liệu và buộc quay lại khi cần thiết?

Cụ thể hơn, Có cách nào để buộc một đoạn mã nhất định hoàn thành và nếu không hoàn nguyên không? Tôi đang tìm cách thêm lịch sử vào các giao dịch trong dự án của mình và tôi không muốn giao dịch cam kết không có lịch sử được lưu vì vậy nếu máy chủ rơi giữa hai hành động (lưu giao dịch và lưu lịch sử), cơ sở dữ liệu có thể đi vào một trạng thái bất hợp pháp.

Trả lời

5

Bạn muốn nhìn vào ActiveRecord TransactionsPessimistic Locking.

Account.transaction do 
    account = Account.find(account_id) 
    account.lock! 

    if account.balance >= 100 
    account.balance -= 100 
    account.save 
    end 
end 
+0

cũng có thể thực hiện các câu lệnh trên cơ sở dữ liệu trong giao dịch không? – Nayish

+0

Bất cứ điều gì bạn muốn có thể đi trong khối giao dịch, do đó, có, nếu báo cáo có thể được thực hiện. –

+0

và nếu đến cuối, nếu có thể đã thất bại bởi một cái gì đó thay đổi từ một giao dịch khác nhau? – Nayish

1

Có, bạn có cách triển khai giao dịch trong Rails. Một ví dụ:

YourModel.transaction do 
    rec1.save! 
    rec2.save! 
end 

Thông tin thêm here

Các vấn đề liên quan