मैं पंक्तियों की एक बड़ी मात्रा के साथ एक आवेदन में एक ही मुद्दे के साथ काफी संघर्ष कर रहा था और पार्श्व जुड़ने और उपश्रेणियों जैसे विभिन्न उपन्यास समाधानों की कोशिश करने के बाद सबसे अच्छा प्रदर्शन करने वाला और सबसे सरल समाधान केवल तालिका में एक विदेशी कुंजी जोड़ने के लिए था जो इंगित करता है नवीनतम पंक्ति में और एक एसोसिएशन कॉलबैक (या एक db ट्रिगर ) विदेशी कुंजी सेट करने के लिए।
class AddLatestEmploymentToEmployees < ActiveRecord::Migration[6.0]
def change
add_reference :employees, :latest_employment, foreign_key: { to_table: :employments }
end
end
class Employee < ActiveRecord::Base
has_many :employments, after_add: :set_latest_employment
belongs_to :latest_employment,
class_name: 'Employment',
optional: true
private
def set_latest_employment(employment)
update_column(:latest_employment_id, employment.id)
end
end
Employee.joins(:latest_employment)
.where(employments: { status: :active })
यह वास्तव में चमकता है यदि संबंधित रिकॉर्ड की मात्रा बहुत बड़ी है जैसे कि यह मेरे मामले में था क्योंकि आप स्मृति समस्याओं के बिना नवीनतम रिकॉर्ड लोड कर सकते हैं जो तब होता है जब आप संपूर्ण has_many
लोड करते हैं संघ।