Poměrně jsem se potýkal se stejným problémem v aplikaci s velkým množstvím řádků a po vyzkoušení různých nových řešení, jako jsou boční spojení a poddotazy, bylo nejvýkonnějším a zdaleka nejjednodušším řešením prostě přidat cizí klíč do tabulky, který ukazuje. na nejnovější řádek a použijte zpětné volání přidružení (nebo spouštěč db ) pro nastavení cizího klíče.
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 })
Opravdu svítí, pokud je množství přidružených záznamů obrovské, jako tomu bylo v mém případě, protože můžete dychtivě načíst nejnovější záznam bez problémů s pamětí, ke kterým dojde, když načtete celý has_many
sdružení.