我有用戶,帖子和評論。用戶只能向每個帖子發佈一條評論。檢索給定用戶評論的所有帖子,Ruby on Rails
class User < ActiveRecord::Base
has_many :posts
has_many :comments
end
class Post < ActiveRecord::Base
has_many :comments
belongs_to :user
end
class Comment < ActiveRecord::Base
belongs_to :user
belongs_to :post
end
在userpage(http://host/users/1
例如)我想說明在特定用戶評論的所有訊息。然後每篇文章將有所有其他評論。
我可以做這樣的事情在我的用戶控制:
def show
@user = User.find(params[:user_id])
@posts = []
user.comments.each {|comment| @posts << comment.post}
end
這樣,我會找到用戶,那麼他所有的意見,然後相應的後交於每個註釋,然後(在我看來),每個發佈我將呈現post.comments。我在Rails中是全新的,所以我可以做到這一點=)但我認爲它有點不好,有更好的方法來做到這一點,也許我應該使用範圍或named_scopes(不知道這是什麼,但看起來像害怕)。
那麼你能指出我在正確的方向嗎?
我不得不承認,我第一次讀這本書時迷路了,因爲我的思想還停留在「用戶 - >帖子 - >評論」的關係上。但是,經過幾次審查之後,我對'用戶 - >評論 - >帖子'心智模型進行了調整。評論看起來像一個經典的多對多映射模型,然後這一切似乎都很簡單! – 2010-10-23 14:09:56
哇!它效果很好。比我想象的更容易。謝謝。 – fetsh 2010-10-23 14:17:18
@愛德華你在指甲上。 'has_many:through =>'與has_and_belongs_to_many'或多或少相同,只是'has_many:through =>'可以讓你處理連接關聯。這就是常見的用例,儘管它對@ilzoff所做的也很完美。 – 2010-10-23 14:21:47