簡體   English   中英

這甚至應該是has_many:through關聯嗎?

[英]Should this even be a has_many :through association?

一個帖子屬於一個用戶,而一個用戶擁有多個帖子。
帖子還屬於一個主題,而主題也有很多帖子。

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

好吧,這很簡單,也很容易設置,但是當我顯示一個主題時,我不僅想要該主題的所有帖子,還想要發布該帖子的用戶的user_name和user_photo。 但是,這些屬性存儲在用戶模型中,並且與主題無關。 那么我將如何進行設置?

由於Post模型具有兩個外鍵,一個用於用戶,一個用於主題,也許已經可以調用它了?

或者,也許這是某種通過聯系的“單向” has_many。 就像Post是聯接模型一樣,Topic將具有has_many:users,:through =>:posts。 但這並非如此。 像用戶一樣,沒有has_many:topics。

因此,甚至需要has_many:though關聯嗎? 我想我對控制器為給定主題同時調用該帖子和該帖子的用戶的外觀感到有些困惑。

編輯:真的,非常感謝您的參與。我選擇了tal的答案,因為我將他的代碼用作控制器。 但是,我可以輕松選擇j。或tim。 也謝謝你們 這太容易實現了。 我認為今天可能標志着我與鐵軌戀愛的開始。

您可以在顯示主題及其帖子時獲取user_nameuser_photo ...

就像是:

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

這很簡單。 抱歉,如果我不太了解您的問題。

好吧,例如,如果您想要顯示帖子作者的用戶名,則可以執行以下操作(未經測試,但應該可以):

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

它應該為所有帖子生成一個請求,為用戶生成一個請求,並且帖子集合中應該有用戶。

在一個視圖中(在這里哈姆爾):

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

如果我正確理解了您的問題,則不需要,這里不需要has_many:through關聯。

如果您想顯示主題中發布的所有用戶的列表(跳過發布信息),則將很有幫助。

但是,您將希望從帖子中加載用戶,以防止出現n + 1個查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM