2011-07-09 37 views
15

Tìm kiếm một phương thức đơn giản sử dụng bản ghi hoạt động để lấy dữ liệu từ hai mô hình, kết hợp dữ liệu và sau đó sắp xếp kết quả kết hợp của created_at.kết hợp các kết quả từ hai truy vấn và thứ tự của created_at? [ray 3]

Ví dụ:

giả hai mô hình, Nhận xét & Giống như cả belongs_to tài

trở lại danh sách kết hợp các ý kiến ​​và thích @ của người dùng được sắp xếp theo ngày

Tôi biết tôi có thể làm điều này trong SQL nhưng tôi thực sự muốn một giải pháp ghi âm hoạt động.

Cảm ơn!

Trả lời

21

Tôi tin rằng nó nên càng đơn giản như:

combined_sorted = (User.comments + User.likes).sort{|a,b| a.created_at <=> b.created_at } 
+0

điều này giúp tôi gần hơn, trả lại kết quả truy vấn trong một mảng duy nhất nhưng không kết hợp chúng dựa trên created_at. Nó trả về các bình luận được sắp xếp bởi created_at theo sau là các lệnh được yêu cầu bởi created_at. Tôi cần tất cả các hồ sơ được trộn lẫn với nhau để tôi nhận được luồng thời gian nhận xét/thích hoạt động – istan

+0

về chỉnh sửa này? –

+0

bingo. cảm ơn một tấn! – istan

0

Làm thế nào về một cái gì đó tương tự (chưa được kiểm tra):

class User < ActiveRecord::Base 
    scope :activities_by_date, :joins(:comments).joins(:likes).order("created_at desc") 
end 

Sau đó, bạn có thể làm @user.activities_by_date và để cho các db làm tất cả công việc

+0

Không hiệu quả với tôi. –

+0

Plus, bạn đang gọi phạm vi trên trường hợp người dùng. nó nên là: 'User.activities_by_date' –

Các vấn đề liên quan