2012-03-16 9 views
0

私はliked_idとuser_idを持つLikeモデルを持っています。メッセージモデルは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 

私は、メッセージとメッセージの関連付けを設定して、1つのクエリで取り戻すことができるようにしたいと考えています。

現在、私はjsonのシリアル化で:method => [:latest_message]オプションを使用しています。しかしそれはあまり効果がありません。

このような複雑な関連付けは、プライマリキーと外部キーがlatest_messageのwhereステートメントのようなAND ORsである場合は可能ですか?理想的には、has_one:latest_messageが必要です

+0

多対多関連を参照しましたか? (メッセージhas_many:like:through => 'User')文法を許していない – Philip

答えて

関連する問題