2015-06-12 126 views
4

我有一個奇怪的問題,我找不到合理的解釋。before_validation未被調用?

我正在調查一個錯誤,並將一些日誌記錄到位(通過Rollbar),以便我可以看到某個模型的某些實例的進化。

這裏是我的了:

class Connexion < ActiveRecord::Base 
    before_validation :save_info_in_rollbar 
    after_save :save_info_in_rollbar 

    def save_info_in_rollbar 
     Rollbar.log("debug", "Connexion save", :connexion_id => self.id, :connexion_details => self.attributes) 
    end 
end 

現在我得到的數據載荷翻車防護杆(幾乎2排,每一次接頭是創建/更新)。但奇怪的是:對於某些連接(=>我正在調查的錯誤數據),我根本沒有數據!

我不明白如何創建連接並將其保存到數據庫,並且沒有任何跟蹤before_validation日誌。 看起來回調沒有被調用,但除非我錯了,它應該是回調順序中的第一個=>什麼能防止它被調用?

編輯>>複製和回覆貼,可能是相關的: 有在其中創建或更新聯接3例,放入系統的案例有:

  • .connexions.create()
  • connexion.attr =「value」; connexion.save!
  • connexion.update_attributes(ATTR: 「值」)
+0

嘗試'Connexion.new(params).valid?'。你會看到什麼? – asiniy

+0

irb(main):022:0> Connexion.new.valid? [滾動條]調度有效負載 [滾動條]詳細信息:https://rollbar.com/instance/uuid? [ROLLBAR]發送有效載荷 =>真 IRB(主):023:0> [ROLLBAR]成功 =>模型是有效的和數據被髮送到ROLLBAR =>所有好 – BPruvost

+0

也許,'Rollbar.log '當你得到':connexion_id => nil'時什麼都不做?試着在你的'save_info_in_rollbar'方法中放入或提出一些東西 – asiniy

回答

1

對不起,愚蠢的問題傢伙,解釋是我們有2個應用程序在同一個數據庫上工作,並且修改是由另一個應用程序(當然這不是發送Rollbar更新)進行的。

有時最難的問題有最簡單的答案哈哈

4

其中回調將不會被運行的唯一情況是:

但是:我可能會遺漏一個案例。另外,我假設ActiveRecord/ActiveModel中沒有導致此問題的錯誤。

0

首先,實例方法中不需要self,因爲方法的作用域是實例。

其次,你需要檢查,你如何將數據保存到數據庫。您可以跳過Rails中的回調:Rails 3 skip validations and callbacks

第三,仔細檢查數據。

+0

1 /我知道。這是一個我們必須放下自我的約定。當處理屬性時,我們可以更容易地區分屬性和變量;) 2 /有連接被創建或更新的3種情況,並且這些情況是: - .connexions.create( ) - connexion.attr =「value」; connexion.save! - connexion.update_attributes(attr:「value」) 3 /我的數據已損壞。這就是爲什麼我在做一些調試的原因;) – BPruvost