Theo tài liệu của ActiveRecord::Base:ActiveRecord bình đẳng đối tượng
== (comparison_object) Trả về true nếu comparison_object là như nhau đối tượng chính xác , hoặc comparison_object là của cùng loại và tự có một ID và nó là bằng compare_object.id.
Lưu ý rằng các bản ghi mới khác nhau từ bất kỳ bản ghi nào khác theo định nghĩa, trừ khi bản ghi khác là bản thân số . Ngoài ra, nếu bạn tìm nạp hồ sơ hiện có với chọn và để lại ID, bạn đang ở chế độ riêng của mình, vị từ này sẽ trả về false.
Cũng lưu ý rằng việc hủy hồ sơ sẽ giữ ID của mẫu đó trong mẫu , do đó, các mô hình đã xóa vẫn còn so sánh được.
Nhưng quan sát của tôi cho thấy rằng nó chỉ so sánh instaces, không ids để sau là đúng:
a = Factory.create(:user)
b = User.find_by_email(a.email) # b is logically same as a
a.id.should == b.id # All good
a.should == b # FAILS: Contradicts the docs
a.should_not == b # Contradicts the docs
a.should_not eql b # Contradicts the docs
Câu hỏi đặt ra là 2 AR trường hợp được coi là khác nhau trong khi các tài liệu một cách rõ ràng nói rằng những nên bằng nhau?
CẬP NHẬT: Bình đẳng LÀM VIỆC như mong đợi. Mẫu mã trên không liên quan. Xem câu trả lời của tôi dưới đây.
Lưu ý: Phiên bản hiện tại của liên kết doc trên là tại http://api.rubyonrails.org/classes/ActiveRecord/Core.html#method -i-3D-3D – DreadPirateShawn