J'ai réussi à mettre en place une association auto-référencée d'amitié pour users
dans mon application Ruby on Rails après avoir suivi Ryan Bates' railscast. Je peux suivre avec succès, ne plus suivre et voir qui suit. Maintenant, je veux tirer un autre élément et je ne suis pas sûr de savoir comment le faire.Comment naviguer dans une association auto-référentielle pour d'autres associations?
User has_many :workouts
Je veux afficher les séances d'entraînement pour les utilisateurs que je suivais. Un peu comme Twitter affiche des tweets pour les utilisateurs que vous suivez. Cela peut-il faire compte tenu de mes associations ci-dessous ou dois-je configurer un autre, par exemple,
Friendship has_many :workouts, :through => :users.
Voici le reste des informations de modèle que vous pourriez avoir besoin.
User.rb
has_many :friendships
has_many :friends, :through => :friendships
has_many :inverse_friendships, :class_name => "Friendship", :foreign_key => "friend_id"
has_many :inverse_friends, :through => :inverse_friendships, :source => :user
has_many :workouts, :dependent => :destroy
Friendship.rb
belongs_to :user
belongs_to :friend, :class_name => "User"
Workout.rb
belongs_to :user
Si pas d'autres associations nécessaires, quelle est la syntaxe dans le répertoire/utilisateurs/spectacle .html.erb vue pour afficher les séances d'entraînement pour les amis.
MISE À JOUR:
Il semble basé sur la réponse de Josiah Kiehl ci-dessous, je suis en mesure d'obtenir cette fin. Après avoir testé la console par ses conseils, je le code suivant dans la vue:
<% current_user.friends[0].workouts.each do |workout| %>
<%= workout.title %><br/>
<% end %>
Mais cela semble revenir seulement des séances d'entraînement pour le premier utilisateur que j'ai suivi.
J'espérais intégrer tous les entraînements d'amis dans un flux. Le premier bit de code fonctionne pour la liste des séances d'entraînement par des amis, et quand j'utilise la seconde, j'obtiens une erreur «méthode non définie pour l'entraînement». – bgadoci
pour être plus précis l'erreur est: 'méthode indéfinie' workout 'pour # ' –
bgadoci
Aussi ... J'ai besoin d'avoir les entraînements affichés: order =>" created_at DESC " – bgadoci