繁体   English   中英

在Rails中创建记录后如何延迟

[英]how to delay after creating record in rails

基本上我需要在after_save::create ward之前创建一个关联

Location.rb

 after_save :createward      

  def createward
    w = Ward.find_by_name(self.city)
    if w.nil?
      c = self.create_ward({:name => self.city})
      self.ward_id = c.id  #this line should be delayed because - c.id is called to soon. 
    else
      self.ward_id = w.id
    end
  end

这种工作在大多数情况下会创建或关联记录,但有时c.id将为nil,因为self.ward_id = c.id行在创建新病房之前执行,因此self.ward_id通常为nil; /任何想法如何解决这一问题将是有帮助的:)

您不需要延迟...那样行不通。 create之后,您将已经有记录。 记录有时可能没有保存。 您可以使用.create_ward! (带有! ),如果保存失败将引发错误。 从API文档:

create_association!(属性= {})

与create_association相同,但是如果记录无效,则引发ActiveRecord :: RecordInvalid。

当然,您需要捕获该异常...否则就不会。 无论哪种方式,至少以这种方式,您都可以陈述自己的期望(并使用Exception强制执行)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM