Pregunta

Una publicación pertenece a un usuario y un usuario tiene muchas publicaciones.
Una publicación también pertenece a un tema y un tema tiene muchas publicaciones.

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

Bueno, eso es bastante simple y muy fácil de configurar, pero cuando muestro un tema, no solo quiero todas las publicaciones para ese tema, sino también el nombre de usuario y la foto de usuario del usuario que realizó esa publicación.Sin embargo, esos atributos se almacenan en el modelo de Usuario y no están vinculados al Tema.Entonces, ¿cómo haría para configurar eso?

¿Quizás ya se pueda llamar ya que el modelo de publicación tiene dos claves externas, una para el usuario y otra para el tema?

O tal vez se trate de una especie de "unidireccional" que tiene muchos a través de la asociación.Al igual que la publicación sería el modelo de unión, y un tema sería has_many :users, :through => :posts.Pero lo contrario de esto no es cierto.Como un usuario NO tiene_many: temas.

Entonces, ¿esto tendría que ser has_many: aunque sea una asociación?Supongo que estoy un poco confundido sobre cómo se vería el controlador al llamar tanto a la publicación como al usuario de esa publicación para un tema determinado.

Editar:En serio, gracias a todos los que intervinieron.Elegí la respuesta de tal porque usé su código para mi controlador;sin embargo, podría haber elegido fácilmente el de J. o el de Tim.Gracias a ambos también.Esto fue muy simple de implementar.Creo que hoy podría marcar el comienzo de mi historia de amor con los rieles.

¿Fue útil?

Solución

Bueno, si lo que desea es visualizar el nombre de usuario del autor de la entrada, por ejemplo, se puede hacer algo similar (no probado, pero debería funcionar):

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

debe generar una solicitud de todos los mensajes, y otra para los usuarios, y la colección de mensajes debe tener los usuarios.

en una vista (haml aquí):

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

Otros consejos

Usted puede obtener el user_name y user_photo cuando se muestra un tema y sus mensajes ...

algo como:

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

es muy sencillo. Lo siento si no entiendo su pregunta muy bien.

Si entiendo bien su pregunta, no, un has_many:. Través de la asociación no se requiere aquí

Si desea mostrar una lista de todos los usuarios que registraron en un tema (omitiendo la información de correos), a continuación, sería de gran ayuda.

Usted querrá carga ansiosos los usuarios de mensajes, sin embargo, para evitar consultas n + 1.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top