2012-11-13 23 views
10

Phương thức đường ray: inverse_of có thể được sử dụng để tạo liên kết trong bộ nhớ giữa các đối tượng, để bạn có thể giảm truy vấn trong cơ sở dữ liệu: http://mediumexposure.com/better-memory-associations-inverseof/Có chi phí liên quan đến inverse_of không? Chúng ta có nên thêm nó vào các mối quan hệ bất cứ nơi nào có thể?

Chi phí liên quan đến inverse_of là gì? Tại sao chúng ta không viết ngược lại trên mọi mối quan hệ tồn tại, để giảm truy vấn?

+0

+1, thực sự muốn biết. AFAIK tôi chỉ có thể thấy lợi ích. Đoán nó sẽ trở thành một hành vi mặc định trong phiên bản đường ray sau này –

+0

đó là những gì tôi đang tự hỏi - có vẻ như điều này nên được mặc định bao gồm trên mọi mối quan hệ. Nhược điểm duy nhất tôi có thể nghĩ đến như là một khả năng là có lẽ nó có thể ảnh hưởng đến hiệu suất máy chủ nếu các đối tượng trở nên lớn hơn kết quả (có thể chiếm rất nhiều bộ nhớ?). Đây không phải là cái gì tôi biết nhiều về mặc dù .. – jay

+1

yup, nhưng nhược điểm sẽ được nghiêm túc phản đối bởi thực tế là bạn không lấy cùng một đối tượng hai lần và không có hai bản sao của cùng một đối tượng trong bộ nhớ ... Lý do duy nhất tôi có thể thấy ở đây là nó không phải là quá thường xuyên mà bạn làm một cái gì đó như 'ParentObject.child_objects.first.parent_object' –

Trả lời

2

Từ Ernie Miller talk at Railsconf 2013 (khoảng 15:30)

[...] inverse_of là tính năng ActiveRecord lâu đời nhất bạn không sử dụng, và bạn hoàn toàn nên làm. [...]

+0

Đây là cuộc trò chuyện với một liên kết hoạt động kể từ khi Justin.tv tắt: http://www.confreaks.com/videos/2460-railsconf2013-an-intervention-for-activerecord – Nitrodist

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