2011-12-02 14 views
15

के गुणों के आधार पर रेल सॉर्ट प्रविष्टियां मेरे पास एक अजीब परिदृश्य है: मैं उस समय तक सभी पोस्ट ऑर्डर करना चाहता हूं, जिस पर पी के निर्माता और वर्तमान उपयोगकर्ता मित्र बन गए।संबंधित मॉडल

परिणाम नीचे शीर्ष और पुराने मित्रों की पोस्ट पर नए मित्रों की पोस्ट के साथ पोस्ट की एक सूची होगी। हम मान सकते हैं कि सभी उपयोगकर्ता अन्य सभी उपयोगकर्ताओं के मित्र हैं, लेकिन प्रत्येक दोस्ती के निर्माण के समय अलग-अलग होते हैं।

मेरे पास पोस्ट, उपयोगकर्ता और मैत्री मॉडल हैं। पद उपयोगकर्ताओं के हैं और उपयोगकर्ताओं की कई दोस्ती है।

class User < ActiveRecord::Base 
    has_many :friendships 
    has_many :friends, :through => :friendships 
    has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id" 
    has_many :inverse_friends, :through => :inverse_friendships, :source => :user 
end 

class Friendship < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :friend, :class_name => "User" 
end 

class Post < ActiveRecord::Base 
    belongs_to :user 
end 

ऐसा करने का सबसे अच्छा तरीका क्या है? धन्यवाद! के साथ एक दायरे में

@posts = Post.joins(:user => :friendships).order("friendships.friended_at") 

उत्तर

26

आप एक नेस्टेड करके जुड़े मेज पर आदेश कर सकते हैं में शामिल होने, इसलिए इस तरह के

class Post < ActiveRecord::Base 
    belongs_to :user 

    scope :ordered, -> { 
    joins(:user => :friendships).order("friendships.friended_at") 
    } 
end 
+2

कैसे आप एक गुंजाइश में है कि बारी चाहते हैं? – MicFin

0

बस एक परिशिष्ट, के रूप में धन्यवाद, सीन हिल का जवाब भी है, जो कि रेल में 4 फ़ील्ड के साथ संबंधों के माध्यम से हैसमी का उपयोग करके परिणामों को सॉर्ट करने के लिए थोड़ा संशोधित करता है।

तो यदि संदेश दोनों बातचीत के लिए हैं ऑन और उपयोगकर्ता और आप पहले उपयोगकर्ता पेज पर वार्तालापों की एक सूची चाहते हैं-शायद कुछ संदेश विशेषता को अपडेट या संशोधित करने से पहले- लेकिन वार्तालापों पर एक विशेषता द्वारा क्रमबद्ध (उदा। "शीर्षक"), संदेश नहीं, आप संदेश से बातचीत और वार्तालाप विशेषताओं के माध्यम से उपयोगकर्ता से जा सकते हैं।

ध्यान में रखते हुए:

<% fields_for :messages, @user.messages.joins(:conversation).order("title ASC") do %> 

या User.rb मॉडल में:

has_many :messages, -> {joins(:conversation).order("title ASC")} 
संबंधित मुद्दे