2012-03-16 4 views
0

У меня есть модель Like с любимым_идом и 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 

Я хочу, чтобы иметь возможность установить связь между как и сообщения, и быть в состоянии вытащить его обратно в одном запросе.

В настоящее время я использую параметр: method => [: latest_message] в моей сериализации json. Но это не очень хорошо.

Может ли такая сложная ассоциация быть сделана там, где первичные и внешние ключи являются И ИЛИ, как в заявлении where в последнем_значении? В идеале я хочу has_one: last_message

+0

Вы искали много-много ассоциаций? (Сообщение has_many: like: through => 'User') Im не рельсовый парень, поэтому прощайте синтаксис – Philip

ответ

Смежные вопросы