2015-09-04 53 views
-1

有沒有回調失敗的情況?Ruby模型回調無法運行?

大約4-​​5天前,回調已經「出現」以隨機停止在某些型號上運行。問題是它是間歇性的。

最簡單的是:

after_create :generate_tokens 
def generate_tokens 
    self.update(ref: Devise.friendly_token[0,10]) 
end 

有被創造,其中裁判是nil車型。看起來隨機地在整個桌子上隨意擺弄。

當我重新部署對乘客進行重置時,它將重新開始工作。很明顯,代碼中的某些內容「中斷」並需要重置,但不會顯示任何錯誤或系統投訴。

  • 的Rails 4.2.0
  • 紅寶石2.2.1p85
  • 的Apache/2.4.7
  • 客運5.0.4

感謝

+0

您正在使用哪種版本的導軌? – Salil

+0

@Salil,加入了它 – nitsujri

回答

1

我會改變after_create回調一個before_validate回調。然後ref被寫入到與新對象相同的事務中的數據庫中。而且 - 作爲獎勵 - 你可以在ref值的情況下添加一個驗證你的模型:如果更新已完成或不

before_validation :generate_tokens, on: [:create] 
validates! :ref, presence: true, on: :create 

private 
def generate_tokens 
    self.ref = Devise.friendly_token[0,10] 
end 
0

的ActiveRecord#更新返回boolean說服力。由於沒有使用返回,或者沒有發現錯誤,您的代碼可能無法通過(針對實例的驗證錯誤)。

由於這裏的回調函數是after_create,所以你的對象將會被保留,但是generate_tokens可能會下降。我建議你切換你的代碼到

def generate_tokens 
    self.update!(ref: Devise.friendly_token[0,10]) 
end 

它會引發一個異常,因此幫助你發現問題。