Làm thế nào để bạn xóa một đối tượng ActiveRecord?
Tôi đã xem Active Record Querying và nó không có gì để xóa mà tôi có thể thấy.
Xóa bởi
id,Xóa đối tượng hiện tại như :
user.remove,Bạn có thể xóa dựa trên một
wheređiều khoản?
Làm thế nào để bạn xóa một đối tượng ActiveRecord?
Tôi đã xem Active Record Querying và nó không có gì để xóa mà tôi có thể thấy.
Xóa bởi id,
Xóa đối tượng hiện tại như : user.remove,
Bạn có thể xóa dựa trên một wheređiều khoản?
Câu trả lời:
Đó là destroyvà destroy_allphương pháp, như
user.destroy
User.find(15).destroy
User.destroy(15)
User.where(age: 20).destroy_all
User.destroy_all(age: 20)
Ngoài ra, bạn có thể sử dụng deletevà delete_allsẽ không thực thi :before_destroyvà :after_destroygọi lại hoặc bất kỳ tùy chọn liên kết phụ thuộc.
User.delete_all(condition: 'value')sẽ cho phép bạn xóa các bản ghi mà không cần khóa chính
Lưu ý : từ nhận xét của @ hammadian, user.destroysẽ không hoạt động nếu Mô hình người dùng không có khóa chính.
Lưu ý 2 : Từ nhận xét của @ pavel-chuchuva, destroy_allvới các điều kiện và delete_allđiều kiện đã không được chấp nhận trong Rails 5.1 - xem hướng dẫn.rubyonrails.org/5_1_release_notes.html
User.find_by(username:"bob") cũng tốt để xác định bản ghi để hủy hoặc xóa.
Có delete, delete_all, destroy, và destroy_all.
Các tài liệu là: tài liệu cũ và tài liệu Rails 3.0.0
deletekhông khởi tạo các đối tượng, trong khi destroyđó. Nói chung, deletelà nhanh hơn destroy.
deletenhanh hơn nhưng bỏ qua các cuộc gọi lại mà bạn có thể đã xác định trên mô hình
User.destroyUser.destroy(1)sẽ xóa người dùng với id == 1và :before_destroyvà :after_destroycallbacks xảy ra. Ví dụ: nếu bạn có hồ sơ liên quan
has_many :addresses, :dependent => :destroy
Sau khi người dùng bị phá hủy, địa chỉ của anh ta cũng sẽ bị hủy. Nếu bạn sử dụng hành động xóa thay thế, cuộc gọi lại sẽ không xảy ra.
User.destroy, User.delete
User.destroy_all(<conditions>) hoặc là User.delete_all(<conditions>)
Lưu ý : Người dùng là một lớp và người dùng là một đối tượng thể hiện
User.destroy_all()chạy các cuộc gọi lại, vì vậy trước khi xóa bất cứ thứ gì, nó sẽ tải các bản ghi. Đó là hai câu lệnh SQL không phải là một. Ngoài ý nghĩa về hiệu suất, điều này cũng có ý nghĩa tương tranh. Cuộc gọi an toàn hơn bỏ qua cuộc gọi lại; User.delete_all()sẽ chỉ phát hành một DELETE FROM...lệnh duy nhất .
Đây là một liên kết đến các tài liệu rails , đó là những điều cơ bản trong Active Record