Pergunta

Uma postagem pertence a um usuário, e um usuário possui postagens.
Uma postagem também pertence a um tópico, e um tópico possui postagens.

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

Bem, isso é bastante simples e muito fácil de configurar, mas quando exibo um tópico, não apenas quero todas as postagens para esse tópico, mas também o user_name e o user_photo do usuário que fizeram essa postagem. No entanto, esses atributos são armazenados no modelo de usuário e não estão vinculados ao tópico. Então, como eu iria configurar isso?

Talvez já possa ser chamado, já que o modelo de post tem duas chaves estrangeiras, uma para o usuário e outra para o tópico?

Ou, talvez isso seja algum tipo de "unidirecional" tem_many através da assiociação. Como a postagem seria o modelo de junção, e um tópico teria_many: usuários :: through =>: posts. Mas o inverso disso não é verdadeiro. Como um usuário não tem_many: tópicos.

Então, isso precisaria ser Has_Many: Embora a associação? Acho que estou um pouco confuso sobre como seria o controlador chamar a postagem e o usuário dessa postagem para um tópico de dar.

EDIT: Sério, obrigado a tudo o que pesa. Eu escolhi a resposta de Tal porque usei o código dele para o meu controlador; No entanto, eu poderia ter escolhido com a mesma facilidade J. ou Tim. Obrigado a ambos também. Isso foi tão simples de implementar. Acho que hoje pode marcar o começo do meu caso de amor com Rails.

Foi útil?

Solução

Bem, se o que você deseja é exibir o nome de usuário do autor de uma postagem, por exemplo, você pode fazer algo como (não testado, mas deve funcionar):

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

Ele deve gerar uma solicitação para todas as postagens e outra para usuários, e a coleção de postagens deve ter usuários.

Em uma visão (Haml aqui):

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

Outras dicas

você pode obter o user_name e user_photo Ao exibir um tópico e suas postagens ...

algo como:

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

é simples. Desculpe se não entendi muito bem sua pergunta.

Se eu entender sua pergunta corretamente, não, um Has_Many: Através da associação não é necessário aqui.

Se você quisesse exibir uma lista de todos os usuários que postaram em um tópico (pulando as informações da postagem), seria útil.

Você deseja carregar os usuários de postagens, porém, para evitar consultas N+1.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top