Question

Un message belongs_to un utilisateur et un utilisateur Messages has_many.
Un message belongs_to également un sujet et un messages has_many de sujet.

class User < ActiveRecord::Base
  has_many :posts
end

class Topic < ActiveRecord::Base
  has_many :posts
end

class Post < ActiveRecord::Base
   belongs_to :user
   belongs_to :topic
end

Eh bien, c'est assez simple et très facile à mettre en place, mais quand j'afficher un sujet, je veux non seulement tous les messages de ce sujet, mais aussi le user_name et le user_photo de l'utilisateur qui a fait que Postes. Cependant, ces attributs sont stockés dans le modèle de l'utilisateur et non liés au sujet. Alors, comment pourrais-je aller sur la configuration cela?

Peut-être qu'il peut déjà être appelé depuis le modèle Post a deux clés étrangères, l'un pour l'utilisateur et un pour le sujet?

Ou, peut-être cela est une sorte de "one-way" has_many par Assiociation. Comme le Post serait la jointure modèle, et un sujet serait has_many: utilisateurs,: => par: messages. Mais l'inverse de ce n'est pas vrai. Comme un utilisateur ne has_many pas. Sujets

Alors serait-ce même besoin d'être has_many: si l'association? Je suppose que je suis un peu confus sur ce que le contrôleur ressembleraient appeler à la fois le message et l'utilisateur de ce poste pour un sujet donnent.

.

Edit: Sérieusement, merci à tout ce qui a pesé dans la réponse que j'ai choisi tal parce que je son code pour mon contrôleur; cependant, je aurais pu tout aussi bien choisi soit j. est ou Tim à la place. Merci à vous deux ainsi. C'était si sacrément simple à mettre en œuvre. Je pense aujourd'hui pourrait marquer le début de mon histoire d'amour avec les rails.

Était-ce utile?

La solution

Eh bien, si ce que vous voulez afficher est le nom d'utilisateur de l'auteur d'un poste, par exemple, vous pouvez faire quelque chose comme (non testé, mais devrait fonctionner):

@posts = topic.posts.all(:include => :user) 

il devrait générer une demande de tous les messages, et un pour les utilisateurs, et la collection des postes devrait avoir les utilisateurs.

dans une vue (haml ici):

- @posts.each do |post|
  = post.user.name
  = post.body

Autres conseils

vous pouvez obtenir le user_name et user_photo lors de l'affichage d'un sujet et ses messages ...

quelque chose comme:

@topic.posts.each do |post|
   user_name = post.user.name
   user_photo = post.user.photo
end

il est simple. désolé si je ne comprenais pas très bien votre question.

Si je comprends bien votre question, non, un has_many. Par l'association n'est pas nécessaire ici

Si vous souhaitez afficher une liste de tous les utilisateurs qui ont affiché dans un sujet (sauter les informations post), il serait alors utile.

Vous voulez charger les utilisateurs désireux de messages, bien que, pour éviter des requêtes n + 1.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top