2011-08-04 58 views
0

我的模型是這樣的:討論has_many帖子(嵌套資源)。有一個嵌套父模型指向第一個子模型

我想將starter_post_id列添加到discussions表中,並讓它記錄'線程起始者帖子ID'。討論與嵌套形式的帖子一起創建,並且當邏輯應該被調用時,因爲討論的其他帖子將是回覆不是初學者帖子

我不知道我在add_column db遷移後需要做什麼。

  1. 我的Discussion模型中是否需要belongs_to :post
  2. 這些嵌套對象的創建順序是什麼。例如父母的創作在孩子開始之前就結束了?還是父構造函數會調用子構造函數?
  3. 初學者職位分配邏輯應該採用哪種模式?這與Q2相關,因爲兩個對象都需要啓動,但最好在DB調用之前。

回答

0

我在before_save之前試過,它不會工作,因爲在那個時候討論沒有辦法得到啓動器帖子目標克拉。我被指出使用after_create代替。

def after_create 
    self.starter_post_id = self.posts.first.id 
    self.save! 
end 

這將導致一個額外的sql查詢,但它比在post模型中執行它更好。

我用belongs_to所以我可以使用discussion.start_post_id,但我想這是可選的。

0

我會使用您的發佈模型中的created_at字段來確定討論的starter_post。不需要任何列。

添加這樣的事情在你的討論模型

def starter_post 
    self.posts.order("created_at ASC").first() 
end 

如果您在使用本discussion.rb:

has_many :posts , :order => "created_at ASC" 

可以然後只需使用:

def starter_post 
    self.posts.first() 
end 
+0

謝謝,但對不起,我忘了提及我需要記錄這個,因爲我需要做一個「最近10次討論的標題」。我想減少SQL調用的數量。 (討論標題取自首發帖子標題) – lulalala

相關問題