2011-07-09 10 views
15

İki modelden veri almak için etkin kaydı kullanan basit bir yöntem arıyorsanız, verileri birleştirin ve ardından birleştirilmiş çıkışı created_at ile sıralayın., iki sorgudan sonuçları birleştirip created_at tarafından mı sıralandı? [raylar 3]

Örneğin

:

iki model farz Kullanıcı belongs_to hem

dönüş tarihe göre sıralanmış @ kullanıcının yorum ve beğeni kombine liste gibi & Comment Ben SQL yapabilirsiniz biliyorum

ama ben gerçekten aktif bir kayıt çözümü istiyorum.

Teşekkürler!

cevap

21

Ben o kadar basit olmalıdır inandığı gibi:

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

bu, beni her iki sorgu sonucunu tek bir dizide döndürerek daha da yaklaştırıyor, ancak bunlar created_at'a göre onları karıştırmıyor. Created_at tarafından sipariş edilen yorumlar ve ardından created_at tarafından sipariş edilenler tarafından döndürülen yorumlar döndürür. Tüm kayıtları bir arada karıştırmaya ihtiyacım var, bu yüzden bu düzenleme hakkında kronolojik bir yorumlama/beğeni aktivitesi – istan

+0

olsun? –

+0

bingo. teşekkürler ton! – istan

0

(denenmemiş) böyle bir şey nasıl

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

Sonra @user.activities_by_date yapmak ve db tüm çalışma yapalım yapabilirsiniz

+0

Benim için çalışmıyor. –

+0

Artı, kullanıcı örneği üzerinden kapsam diyorsunuz. Bunun yerine: User.activities_by_date' –