Domanda

Un post appartiene_a un utente e un utente ha_molti post.
Un post appartiene anche a un argomento e un argomento ha molti post.

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

Bene, è piuttosto semplice e molto facile da configurare, ma quando visualizzo un argomento, non voglio solo tutti i post per quell'argomento, ma anche il nome_utente e la foto_utente dell'utente che ha creato quel post.Tuttavia, tali attributi vengono archiviati nel modello User e non legati all'argomento.Allora come potrei configurarlo?

Forse può già essere chiamato poiché il modello Post ha due chiavi esterne, una per l'Utente e una per l'Argomento?

O forse si tratta di una sorta di "unidirezionale" ha_molti attraverso l'associazione.Ad esempio, il Post sarebbe il modello di unione e un argomento avrebbe_many :users, :through => :posts.Ma non è vero il contrario.Come se un utente NON avesse_many :topics.

Quindi dovrebbe anche essere un'associazione has_many :think?Immagino di essere solo un po' confuso su come apparirebbe il controller per chiamare sia il post che l'utente di quel post per un determinato argomento.

Modificare:Seriamente, grazie a tutto ciò che è intervenuto.Ho scelto la risposta di Tal perché ho usato il suo codice per il mio controller;tuttavia, avrei potuto scegliere con la stessa facilità sia quello di J. che quello di Tim.Grazie lo stesso ad entrambi.Era così dannatamente semplice da implementare.Penso che oggi potrebbe segnare l'inizio della mia storia d'amore con le rotaie.

È stato utile?

Soluzione

Bene, se quello che vuoi è visualizzare il nome utente dell'autore di un post, ad esempio, puoi fare qualcosa del tipo (non testato, ma dovrebbe funzionare):

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

dovrebbe generare una richiesta per tutti i post e una per gli utenti e la raccolta dei post dovrebbe avere utenti.

in una vista (haml qui):

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

Altri suggerimenti

puoi ottenere il user_name E user_photo quando si visualizza un argomento e i relativi post...

qualcosa di simile a:

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

è semplice.scusa se non ho capito molto bene la tua domanda.

Se ho capito bene la tua domanda, no, qui non è richiesta un'associazione has_many :through.

Se volessi visualizzare un elenco di tutti gli utenti che hanno pubblicato in un argomento (saltando le informazioni sul post), sarebbe utile.

Tuttavia, ti consigliamo di caricare con entusiasmo gli utenti dai post, per evitare n+1 query.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top