PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да създам заявка в Ruby on Rails, която се присъединява към максимума само на релация has_many и включва филтър за избор на тази релация?

Доста се борих с точно същия проблем в приложение с огромно количество редове и след като изпробвах различни нови решения като странични съединения и подзаявки, най-ефективното и най-простото решение беше просто да добавя чужд ключ към таблицата, който сочи към последния ред и използвайте обратно извикване на асоцииране (или 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 асоциация.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Заменете символите с многознакови низове

  2. Apache Felix няма достъп до Postgres JDBC

  3. Използвайте променлива, зададена от мета-команда psql вътре в блока DO

  4. Защо защитата на ниво ред не е активирана за изгледи на Postgres?

  5. Цяло число извън диапазона на Postgres DB