PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm cách nào để tạo một truy vấn trong Ruby on Rails chỉ tham gia vào tối đa của một quan hệ has_many và bao gồm một bộ lọc chọn trên quan hệ đó?

Tôi đã phải vật lộn khá nhiều với cùng một vấn đề trong một ứng dụng có rất nhiều hàng và sau khi thử các giải pháp mới khác nhau như các phép nối bên và truy vấn con, hoạt động tốt nhất và giải pháp đơn giản nhất là chỉ cần thêm một khóa ngoại vào bảng trỏ đến hàng mới nhất và sử dụng lệnh gọi lại liên kết (hoặc trình kích hoạt db ) để đặt khóa ngoại.

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

Nó thực sự tỏa sáng nếu số lượng bản ghi liên quan là rất lớn như trong trường hợp của tôi vì bạn có thể tải bản ghi mới nhất mà không gặp sự cố bộ nhớ xảy ra nếu bạn tải toàn bộ has_many liên kết.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostgreSQL và QSqlQuery.bindValue () chậm

  2. Tham gia bên ngoài bên trái phức tạp trong Oracle, chuyển đổi sang PostgreSQL

  3. Đối với người mới bắt đầu, có nhiều sự khác biệt giữa MySQL và PostgreSQL không

  4. ngủ đông không thể nhận giá trị trình tự tiếp theo

  5. Lỗi khi cố chạy pgAdmin4