我運行一個Rails 2.3.14應用程序,使用counter_cache列counter_cache列,類似於:正在使用update_attributes更新Rails counter_cache的關聯;不更新
Workshop
belongs_to :group, :counter_cache => true
Group
has_many :workshops
如果我直接我的工作室分配到一組,計數器緩存更新罰款。
@workshop.group = Group.first
@workshop.save # group counter updated
但是,如果我一個GROUP_ID質量分配到車間,在傳統的Rails控制器風格,緩存不更新。我認爲這是2.3.14中的一個bug。
def update
@workshop = Workshop.find(params[:id])
# params[:workshop] contains a group_id assignment, thus the problem
if @workshop.update_attributes(params[:workshop])
flash[:notice] = 'Workshop was successfully updated.'
# @workshop.group counter NOT updated
它也存在於舊版本: http://railsforum.com/viewtopic.php?id=34473
然而,海報的「解決方案」引入了重複計算的錯誤 - 如果你直接分配,你將得到默認的軌道更新和回調一,但它確實工作update_attributes。
所以,我可以做一些事情 - 我可以從參數散列中去掉group_id並直接賦值。或者我可以在我的Workshop模型上修補update_attributes來爲我做這件事。
我想避免去掉params散列,因爲這不是直觀且自我記錄,所以任何其他可能會打電話給@ workshop.update_attributes的人都會遇到同樣的錯誤。猴子補丁update_attributes似乎是最安全的,但也是完全錯誤的。
任何其他建議?
謝謝!