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

时间:2014-05-28 02:40:50

标签: ruby-on-rails ruby-on-rails-3 ruby-on-rails-3.2 rails-models

基本上我需要在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通常是零; / 任何想法如何解决这个问题都会有所帮助:)

1 个答案:

答案 0 :(得分:1)

你不需要延迟......它不会那样工作。 create之后你已经有了你的记录。记录有时候更有可能无法保存。如果保存失败,您可以使用.create_ward!(带!)来引发错误。来自API文档:

  

create_association!(attributes = {})

     

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

当然,你需要捕获异常......或者不是。无论哪种方式,至少以这种方式说明你的期望(并用异常强制执行)。