2012-08-29 1 views
0

J'ai une table de forum qui a une colonne "last_post_id", qui pointe vers le dernier message fait dans un forum. Comment puis-je inclure cela dans ma requête principale du forum afin que le dernier sujet soit un objet auquel je peux accéder?inclure un résultat de base de données en tant qu'objet en utilisant une clé étrangère personnalisée

Ce ne fonctionne pas, mais il contribue à montrer ce que je suis après

Forum.all(
    :include => {:posts => {:foreign_key => "last_post_id"}}, 
    :order  => "ancestry ASC, display_order ASC", 
) 

Je voudrais être en mesure d'accéder au dernier objet de poste en utilisant quelque chose comme « forum.last_post.date ». Est-ce possible, quelle est la solution la plus propre?

Le sql RAW devrait ressembler à ceci:

 SELECT forums.*, last_post.* 
     FROM forums as forums 
    LEFT JOIN posts as last_post on last_post.id = forums.last_post_id 
    ORDER BY ancestry asc, display_order asc 

Répondre

1
class Forum < ActiveRecord::Base 
    has_many :posts 
    has_one :last_post, :class_name => 'Post', :primary_key => :last_post_id 
end 

Forum.all(:include => [:last_post]) 
Questions connexes