2010-02-23 6 views
0

j'ai une association HABTM de travail entre les modèlesrails HABTM rejoint et incommode

messages et les utilisateurs ... la table est posts_users comme prévu, et les deux ont le has_and_belongs_to_many nécessaire dans leur model.rb

Et si J'utilise User.find(1).posts il va trouver tous les messages avec le nom d'utilisateur valide

Ma question est de savoir comment faire face à cette situation.

Je veux utiliser

user.posts.find(1234) ou vraiment du contrôleur eq:

current_user.posts.find(params[:id]) 

Pour me protéger d'autres utilisateurs sautent partout. Cependant, cet usage a des résultats étranges. Il fonctionne, mais au lieu de l'identifiant étant un identifiant valide pour un poste particulier ou tous les postes, il retourne l'identifiant de 1 au lieu de dire, le vrai de 1234. Ainsi encore rejoint tels que:

user.posts.find(1234).comments 

ne fonctionnent pas ou sont invalides.

J'ai essayé de lancer all quelques endroits pour faire bonne mesure, car cela a parfois fonctionné pour d'autres situations difficiles dans le passé. Avec quelques rencontres encore étranges.

user.posts.all.first fonctionne et renvoie le bon ID !, mais l'utilisation d'abord n'est pas vraiment utile. user.posts.all.find(6933) retours #<Enumerable::Enumerator:0x105343630>

a également essayé diverses combinaisons avec (:post_id => 1234) retour d'un identifiant de toujours 1.

Toutes les idées?

+0

rails 2.3.5 dans le cas où il – holden

+0

des questions, je pense que la question est que parce qu'il est une association, vous verrez toujours un tableau/dénombrable retourné –

+0

aussi. si vous connaissez le post_id, pourquoi avez-vous –

Répondre

1

Ceci est probablement dû au fait que votre table de jointure posts_users a une colonne id. ceci:

create_table :posts_users, :id => false do |t| 
    t.references :posts 
    t.references :users 
end 
+0

Cela fonctionne parfaitement Merci! Sauf si j'essaie d'utiliser find() avec un id_amitié au lieu d'un ID, friendly_id retourne le bon enregistrement mais avec l'ID de friendly_id et pas les messages. – holden

+0

Je ne sais pas quel est votre problème exact, mais j'ai déjà évité certains de ces problèmes avec un nom de table explicite ': select => '*' 'dans la méthode find pour s'assurer que seules les colonnes d'une table étaient retirées. –

0

Que diriez-vous de l'utilisateur a beaucoup de commentaires à travers les messages. Puis quelque chose comme user.comments.find (: all,: conditions => {: post_id => 1234}