不,你不應該在這種情況下需要一個連接表。連接表是針對has_and_belongs_to_many
的關係,在這種情況下,您不需要擁有其中的一個(註釋不能屬於許多帖子,可以嗎?)。
你有兩個選擇來解決這個問題。首先是建立一個多態的關係:
class Post < ActiveRecord::Base
has_many :comments, :as => :parent
end
class Comment < ActiveRecord::Base
belongs_to :parent, :polymorphic => true
has_many :children, :class_name => 'Comment', :as => :parent # We need to point this relationship to the Comment model, otherwise Rails will look for a 'Child' model
end
這將允許評論要麼屬於一個帖子,或其他評論。 Comment.last.parent
將返回Post
或Comment
記錄。
第二個選擇是讓所有的意見都屬於一個特定的職位,但有自己的親子關係:
class Post < ActiveRecord::Base
has_many :comments
end
class Comment < ActiveRecord::Base
belongs_to :post
belongs_to :parent, :class_name => 'Comment' # We need to point this relationship to the Comment model, otherwise Rails will look for a 'Parent' model
has_many :children, :class_name => 'Comment' # We need to point this relationship to the Comment model, otherwise Rails will look for a 'Child' model
end
這樣一來,您的意見將永遠屬於一個帖子,還有可能屬於另一個評論。
如果你打算嵌套評論(至少多於一個級別),我會建議第二個選項。這將允許您在一個查詢中獲取特定帖子的所有評論(而不必爲每條評論查找子文件),並且可以在渲染它們之前對應用程序中的評論進行排序。但無論哪種方式應該工作。
很棒的回答。 +1 – 2010-10-14 02:20:14
哇!我無法爲此感謝你!非常感謝你 – Trip 2010-10-14 10:15:48
不客氣。 :) – vonconrad 2010-10-15 02:08:46