我有一個簡單的rails webservice,公開了允許客戶端發佈新記錄的JSON API。處理POST時,它首先創建引用記錄,但同時也更新一些相關記錄。update_attributes在本地工作,但不會影響部署到Heroku時的更改
@foo = Foo.new(foo_params)
if @foo.save
related_list = Foo.where(:some_id => foo_params[:list])
related_list.each do |related|
# <figure out some stuff here>
related.update_attributes(stuff)
end
# debug spew
@test = Foo.find(a_related_record_id)
puts @test.as_json
format.json { render json: @foo.as_json }
end
我承認這是一個糟糕的兩階段提交模式,它的濫用典型的REST模式,但我繼承了這個代碼。我將最終解決它;這是階段性的「修復」計劃的一部分。
此代碼完美地在本地測試框上工作。在部署到Heroku時,我會調用debug模式,顯示在調用update_attributes之後顯然正在更新的模型。但是,不知何故,該模型並未實際更新。當我使用網頁查看「相關」記錄時,他們都沒有更新過「內容」更改。我對此感到非常困惑,因爲調試過程中似乎顯示正在更新的記錄。任何見解?
更新
有一件事我只注意到我又回到我身邊調試噴涌的是,日期時間的updated_at永遠不會改變,即使在記錄中的字段顯示有。您可以從下面的行看到,通話是在UTC時間8:04:15左右完成的。另外,我證實update_attributes返回true,所以沒有錯誤,據我所知。
之前的update_attributes被稱爲:
←[36m2012-09-20T08:04:15 + 00:00應用程式[web.1]←[0米{ 「created_at」=>星期四,9月20日2012 00:43:45 UTC +00:00,「somefield」=>「」,「id」=> 2,「updated_at」=> Thu,20 Sep 2012 06:22:07 UTC +00:00}
後update_attributes方法被稱爲:
←[36m2012-09-20T08:04:15 + 00:00 app [web.1]:←[0m {「created_at」=> Thu,20 Sep 2012 00:43:45 UTC +00:00,「somefield」=> 「10000848364」, 「ID」=> 2,「的updated_at」=>星期四,2012年9月20日6點22分07秒UTC 00:00}
是不是'stuff'哈希值包含舊'updated_at'值? – khustochka
好問題。不,我檢查過。 'stuff'哈希只包含'somefield'的變化,內容是正確的。 – AKhoo
是否有任何形式的頁面緩存正在呈現更新記錄的視圖? – jakeonrails