2010-10-17 90 views
0

假設我有一個屬於Post模型的Comment模型。ActiveRecord has_many關係阻止孤立的新創建的對象

我想讓它創建一個新的Comment實例(無論是通過new,create,find_or_create_by_x等)將會失敗(最好引發一個異常),除非立即設置Post(或者通過傳遞它作爲參數或創建評論時始終引用帖子,例如post.comments.new或post.comments.create)。

我想這樣做是因爲我想在評論對象中設置一些基於帖子的默認值...所以帖子引用需要立即生效。

完成此操作的最佳方法是什麼?謝謝。

回答

0

我覺得爲了這個與new工作,你必須做在after_initialize

def after_initialize 
    raise "no Post" unless post 
end 

好像矯枉過正不過,因爲有運行每一個註釋實例化的時間。我會說寫測試,確保默認設置適當。

+0

我不介意它好像會來與開銷:

class Comment < ActiveRecord::Base validates_presence_of :post_id end 

然後利用創造新的評論領土。 – 2010-10-18 07:47:48

0

我會在您的評論添加到模型驗證,像這樣:

@post = Post.find(params[:post_id]) 

@post.comments.create(params[:comment]) 
+0

這樣可以防止沒有post_id的情況下進行保存,不會在沒有一個的情況下實例化。 – 2010-10-18 07:44:54

相關問題