假設您在同一頁面上有一條評論,並且在顯示帖子/評論的同一頁面上呈現表單以捕獲新評論。一個帖子has_many
評論。代碼如下:Rails中渲染命令的結果擋住了
class PostsController < ApplicationController
...
def show
@post = Post.find(:params[id])
@comment = Post.comments.new
end
...
end
現在,當你調用你的看法<%= @post.comments.count %>
它給人的已保存的評論的數量,但如果你調用<%= render @post.comments %>
它返回所有保存的意見PLUS新創建(但尚未保存因此仍然無效)評論。爲什麼是這樣?這真的讓我有時間去找到這個,我無法想象這會有用,爲什麼不直接渲染所有有效的數據庫記錄呢?
有沒有人遇到過這個?易於修復,但令人費解..
好的,但我認爲在我執行@ post.comments時也必須執行查詢嗎?我的想法是,因爲我沒有給實例變量分配註釋數組,所以只能使用後置對象,這必須從數據庫中檢索。 – 2012-02-27 09:45:53
嗯,當然,它必須在某個時候完成。 AR通常會在第一次實際使用時延遲加載關聯對象,並且之後只會在您更改集合(或執行顯式查找或某事)時重新加載緩存。我不是100%確定的,但comments.new調用可能已經加載了其他評論,最後還記得一個未保存的對象。 – 2012-02-27 09:51:41
如果那對你有幫助,你能接受答案嗎? – 2012-03-07 10:27:53