2010-08-19 10 views
1

Salut, tousRails3 has_many: à travers et foreign_key fonctionnent pas dans la série: class_name

Je dois trouver des activités amis:

SELECT `activities`.* FROM `activities` 
INNER JOIN `friendships` 
ON `activities`.user_id = `friendships`.friend_id 
WHERE ((`friendships`.user_id = 1)) 

Mes ajouter ce code à modèle utilisateur:

has_many :friends_activities, 
     :class_name => 'Activity', 
     :through => :friendships, 
     :foreign_key => :user_id, 
     :source => :friend 

Mais Rails retour est:

SELECT `activities`.* FROM `activities` 
INNER JOIN `friendships` 
ON `activities`.id = `friendships`.friend_id 
WHERE ((`friendships`.user_id = 1)) 

J'ai besoin:

`activities`.user_id = `friendships`.friend_id 

Mais maintenant:

`activities`.id = `friendships`.friend_id 

PS: Mes tableaux:

create_table "activities", :force => true do |t| 
    t.integer "user_id" 
    t.integer "target_id" 
    t.string "target_type" 
    t.string "verb" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 

create_table "friendships", :force => true do |t| 
    t.integer "user_id", :null => false 
    t.integer "friend_id", :null => false 
    t.string "state" 
    t.datetime "created_at" 
    t.datetime "updated_at" 
end 
+0

quelle version de Rails3 s'agit-il d'une version RC ou bêta? –

+0

Publier votre recherche – Bohdan

Répondre

0

Je ne suis pas sûr que vous pouvez utiliser les options supplémentaires sur has_many: through. Selon to the docs:

Spécifie une association à travers laquelle effectuer la requête. Cela peut être n'importe quel autre type d'association, y compris d'autres: à travers associations. Les options pour: class_name,: primary_key et: foreign_key sont ignorées, car l'association utilise la réflexion de la source.

[Souligné]

0

Votre dernier recours pourrait être:

has_many :friends_activities, 
     :class_name => 'Activity', 
     :finder_sql => Proc.new { 
      %Q{ 
       SELECT `activities`.* FROM `activities` 
       INNER JOIN `friendships` 
       ON `activities`.user_id = `friendships`.friend_id 
       WHERE ((`friendships`.user_id = #{id})) 

       } 
      } 

Je suis sûr qu'il ya une plus élégante façon d'y parvenir, mais en attendant, cela devrait faire le travail .

Questions connexes