复杂的“间接”协会
问题描述:
我有一个喜欢的模式,有一个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
你抬起了一个多对多的关联吗? (消息has_many:像:通过=>'用户')我不是一个铁杆人,所以原谅语法 – Philip 2012-03-16 01:48:50