复杂的“间接”协会

问题描述:

我有一个喜欢的模式,有一个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