1

帖子belongs_to用戶,和用戶has_many帖子。
一篇文章也屬於一個主題,一個主題has_many文章。這應該甚至是一個has_many:通過關聯?

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模型有兩個外鍵,一個用於用戶,另一個用於Topic?

或者,也許這是某種「單向」has_many通過assiociation。就像發佈會是連接模型一樣,主題將會has_many:users,:through =>:posts。但是,這是不正確的。像用戶不has_many:主題。

所以這甚至需要has_many:雖然關聯?我想我只是對控制器看起來像是給該帖子的帖子和用戶發送一個給定主題有點困惑。

編輯:非常感謝所有的權衡。我選擇了tal的答案,因爲我用他的代碼作爲我的控制器;不過,我可以輕鬆地選擇j。's或tim's。謝謝你們倆。這實在太簡單了。我認爲今天可能標誌着我與鐵軌的戀愛開始。

回答

2

好吧,如果你想要的是顯示一個帖子的作者的用戶名,例如,你可以這樣做(未測試,但應工作):

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

它應該產生一個請求所有帖子,一個給用戶,帖子集合應該有用戶。

的視圖(HAML這裏)

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

你可以得到user_name,並顯示一個主題,它的帖子時user_photo ...

類似:

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

這很簡單。對不起,如果我沒有很好地理解你的問題。

2

如果我正確理解你的問題,不,是的has_many:通過關聯這裏不需要。

如果您想顯示發佈在主題(跳過發佈信息)的所有用戶的列表,那麼這將會有所幫助。

儘管如此,您仍然希望加載用戶的帖子,以防止n + 1個查詢。

+0

你好,蒂姆,你能詳細說明一下。你說過一個has_many:通過關聯不是必需的,但後來說這會有所幫助。但我相信你的意思是,只有當我不希望實際的Post.message是正確的? 因此,使用tal發佈的控制器代碼是完成此任務的最佳/最快的查詢? – GoodGets 2010-03-31 00:58:57