我使用的是counter_cache
讓MySQL的做一些簿記對我說:counter_cache不更新的模型保存後
class Container
has_many :items
end
class Item
belongs_to :container, :counter_cache => true
end
現在,如果我這樣做:在
container = Container.find(57)
item = Item.new
item.container = container
item.save
SQL日誌會有一個INSERT
其次是這樣的:
UPDATE `containers` SET `items_count` = COALESCE(`items_count`, 0) + 1
WHERE `containers`.`id` = 57
這是我的前把它做了。但是,container[:items_count]
將陳舊!
...除非我container.reload
拿起更新的值。在我的腦海裏,有些人認爲使用:counter_cache支持定製內容的一部分目的,特別是因爲在嘗試訪問items_count
屬性之前,我實際上可能不需要reload
。 (由於域邏輯的性質,我的模型非常密碼化,所以我有時必須在一次控制器調用中保存並創建多件事情。)
我知道我可以自己修改回調,但在我看來,這似乎是對簡單功能的一個相當基本的期望。同樣,如果我必須編寫額外的代碼才能使其完全工作,那麼實現自定義計數器可能會更容易。
我在做什麼/假設錯誤?
這有效。我發現它不一致,它是一種方式而不是另一種。 – sehnsucht
對我來說這不起作用!只有在重載計數器更新後。我嘗試了各種樣式'create','create!','build.save!'。 – pablo