2011-05-31 63 views
1

假設我有一條名爲Post的記錄,它有很多評論。 現在我運行下面的代碼:如何找到尚未保存在Rails中的記錄?

p = Post.new 
p.comments.build(:title => 'great') 

我現在想找到它的標題是評論。 如果記錄被保存後,我可以做類似

p.comments.find_by_title('great') 

但由於它尚未保存,那將返回零(因爲它實際上運行的SQL查詢) 有沒有找到這樣的方式在保存之前記錄?

謝謝!

回答

1

great_comment = p.comments.detect{|c| c.title == 'great'}

2
comment = p.comments.build(:title => "great") 
+0

你實際上正確的,但我想以後去取,而不必爲它設置一個變量(我是從另一個地方讀它保存記錄之前)。我應該指出這一點。 – 2011-05-31 09:27:17

+0

在這種情況下,您只需使用不同類型的變量存儲。根據你的情況嘗試'session [:comment]','@ comment'或'@@ comment'(注意最後一個)。 – sscirrus 2011-05-31 09:43:48

0

只要寫:

new_comment = p.comments.build(:title => 'great') 

new_comment將是新添加的註釋。

或者,你可以這樣做:

new_comments = p.comments.select{|x| x.new_record?} 

這將使你的所有未保存的註釋的數組。

+0

你的第二個解決方案接近我想要的,但我正在尋找一個特定的記錄。我想我可以做'p.comments.select {| x | x.new_record? && x.title =='很棒'}',但這不是浪費資源嗎? – 2011-06-01 02:39:05

+0

你只是遍歷內存中的'comments'。我還假設在某個特定時刻,只有1條記錄會成爲一條未保存的新記錄。但是,如果情況並非如此,確實會增加額外的條件。理想情況下,你可以將新評論放在一個可以直接訪問的變量中。 – nathanvda 2011-06-01 05:46:02