2015-09-04 50 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 

它会引发一个异常,因此帮助你发现问题。