PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara membuat kueri di Ruby on Rails yang bergabung pada maksimal relasi has_many saja dan menyertakan filter pilih pada relasi itu?

Saya sedikit kesulitan dengan masalah yang sama persis dalam aplikasi dengan sejumlah besar baris dan setelah mencoba berbagai solusi baru seperti penggabungan lateral dan subkueri, solusi berkinerja terbaik dan sejauh ini paling sederhana hanyalah menambahkan kunci asing ke tabel yang menunjuk ke baris terbaru dan gunakan panggilan balik asosiasi (atau pemicu db ) untuk menyetel kunci asing.

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 })

Itu benar-benar bersinar jika jumlah catatan terkait sangat besar seperti dalam kasus saya karena Anda dapat dengan senang hati memuat catatan terbaru tanpa masalah memori yang terjadi jika Anda memuat seluruh has_many asosiasi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Apakah kueri jenis SELECT satu-satunya jenis yang dapat disarangkan?

  2. Bagaimana cara memeriksa apakah ada pengguna postgres?

  3. Ekspor data tabel Postgresql menggunakan pgAdmin

  4. tidak dapat membuat ekstensi tanpa peran pengguna super

  5. Batasi jumlah catatan dalam Model yang dapat memiliki nilai per pengguna