基於有用的工作解決方案here,我試圖修復我的更新回調以及。如何在JavaScript回調(而不是舊對象)中訪問更新的對象
問題是,我試圖從中提取數據的具體unit
始終是舊的緩存版本,即使此回調是由成功的update
操作觸發的。
// callback triggered by the update action
$('.best_in_place').bind("ajax:success", function() {
...
console.log(unit.duration);
// which is exactly the same as
console.log(<%= Unit.find(unit.id).unit_users.pluck(:duration).sum %>);
// and both print the OLD duration val instead of the updated val which is in the database
});
和unit_users_controller代碼...
def update
@unit = @unituser.unit
respond_to do |format|
if @unituser.update(unit_user_params)
@unit.reload
logger.info('-----------------------------------------------------------------')
logger.info('@unit.duration in the controller is ' + @unit.duration.to_s) # which is the correct value
logger.info('-----------------------------------------------------------------')
gon.unit_duration = @unit.duration # an experiment which didn't work for me
format.json {respond_with_bip(@unituser) }
else
# format.html { render :action => 'edit' }
format.json { respond_with_bip(@unituser) }
end
end
end
我試過的unit.reload
幾個版本,並沒有什麼幫助。也許我把它放在錯誤的地方?
你可以發佈控制器代碼嗎? –
@RodrigoZurek與控制器代碼無關。控制器與此無關。這是關於錯誤理解'.js.erb'文件的工作原理。 – meagar
它與控制器有關,如果你想更新的對象必須通過控制器,你必須以某種方式恢復它 –