2012-03-16 51 views
0

我有一個喜歡的模式,有一個likes_id和一個user_id。消息模型to_id和from_id。複雜的「間接」協會

class Like < ActiveRecord::Base 
    belongs_to :user 
    belongs_to :liked, :class_name => "User" 
    validates_presence_of :user_id 
    validates_presence_of :liked_id 

    def latest_message 
    Message.where(["(to_id = ? AND from_id = ?) OR (to_id = ? AND from_id = ?)", self.liked_id, self.user_id, self.user_id, self.liked_id]).order("created_at DESC").limit(1).first 
    end 
end 


class Message < ActiveRecord::Base 
    belongs_to :to, :class_name => "User" 
    belongs_to :from, :class_name => "User" 
    validates_presence_of :to_id, :from_id, :content 
end 

我想能夠建立類似的和消息之間的關聯,並能夠在一個查詢中拉回來。

目前我在我的json序列化中使用:method => [:latest_message]選項。但它不是很高效。

像這樣的一個複雜關聯可以在主鍵和外鍵是AND的ORs的情況下進行,比如在latest_message中的where語句中?理想情況下,我想要一個has_one:latest_message

+0

你擡起了一個多對多的關聯嗎? (消息has_many:像:通過=>'用戶')我不是一個鐵桿人,所以原諒語法 – Philip 2012-03-16 01:48:50

回答