Bạn có thể thực hiện SQL trực tiếp để có một truy vấn duy nhất cho cả hai bảng. Tôi sẽ cung cấp một ví dụ truy vấn được khử trùng để hy vọng mọi người không đặt các biến trực tiếp vào chính chuỗi (nguy hiểm tiêm SQL), mặc dù ví dụ này không chỉ định nhu cầu về nó:
@results = []
ActiveRecord::Base.connection.select_all(
ActiveRecord::Base.send(:sanitize_sql_array,
["... your SQL query goes here and ?, ?, ? are replaced...;", a, b, c])
).each do |record|
# instead of an array of hashes, you could put in a custom object with attributes
@results << {col_a_name: record["col_a_name"], col_b_name: record["col_b_name"], ...}
end
Chỉnh sửa : như Huy đã nói, một cách đơn giản là ActiveRecord::Base.connection.execute("...")
. Một cách khác là ActiveRecord::Base.connection.exec_query('...').rows
. Và bạn có thể sử dụng các câu lệnh được chuẩn bị riêng, ví dụ: nếu sử dụng postgres, câu lệnh được chuẩn bị có thể được thực hiện với raw_connection, chuẩn bị và exec_prepared như được mô tả trong https://stackoverflow.com/a/13806512/178651
Bạn cũng có thể đặt các đoạn SQL thô vào các truy vấn quan hệ ActiveRecord: http://guides.rubyonrails.org/active_record_querying.html
và trong các liên kết, phạm vi, v.v. Bạn có thể có thể xây dựng cùng một SQL với các truy vấn quan hệ ActiveRecord và có thể làm những điều tuyệt vời với ARel như Ernie đề cập trong http://erniemiller.org/2010/03/11/advified-activerecord-3-queries-with-arel/ . Và, tất nhiên có các ORM, đá quý khác, v.v.
Nếu điều này sẽ được sử dụng nhiều và việc thêm các chỉ mục sẽ không gây ra các vấn đề về hiệu suất / tài nguyên khác, hãy xem xét việc thêm một chỉ mục trong DB cho Payment_details.created_at và cho Payment_errors.created_at.
Nếu nhiều hồ sơ và không phải tất cả các hồ sơ cần hiển thị cùng một lúc, hãy xem xét sử dụng phân trang:
Nếu bạn cần phân trang, hãy xem xét việc tạo chế độ xem trong DB trước tiên được gọi là Payment_records kết hợp các bảng Payment_details và Payment_errors, sau đó có một mô hình cho chế độ xem (sẽ chỉ đọc). Một số DB hỗ trợ các khung nhìn cụ thể hóa, có thể là một ý tưởng tốt cho hiệu suất.
Đồng thời xem xét thông số kỹ thuật phần cứng hoặc VM trên máy chủ Rails và máy chủ DB, cấu hình, dung lượng ổ đĩa, tốc độ mạng / độ trễ / v.v., độ gần, v.v. Và xem xét đưa DB lên máy chủ / VM khác với ứng dụng Rails nếu bạn chưa, v.v. .