Rails 4 - 如何从NoMethodError中解救并继续尝试方法?

时间:2015-06-01 17:53:07

标签: ruby-on-rails ruby activerecord rescue

在我的Contacts类中,在使用其电子邮件地址创建联系人之后,我尝试尽可能多地从FullContact的API中提取联系人数据。

我遇到这个问题,如果FullContact中的“人”不存在一列数据,它会抛出NoMethodError而我无法保存可能存在的其余数据到联系,因为我的方法在错误处停止。

如何从NoMethodError中解救并让我的方法继续运行其余的?喜欢它只是跳过错误并尝试其余的代码。我在救援代码中尝试了nextcontinue,但这不起作用。

感谢您的帮助。

class Contact < ActiveRecord::Base  
  belongs_to :user

  after_create do |contact|
    contact.delay.update_fullcontact_data
  end

  def update_fullcontact_data

    person = FullContact.person(self.email) 

    if person.contact_info.given_name.present? 
      self.name = person.contact_info.given_name 
    end

    if person.contact_info.family_name.present? 
      self.last_name = person.contact_info.family_name
    end

    if person.demographics.location_general.present?
      self.city = person.demographics.location_general
    end

    save!

  rescue NoMethodError => exception
   puts "Hit a NoMethodError"
   save!
  end
end

2 个答案:

答案 0 :(得分:7)

一般来说,问题的解决方案是try方法(http://apidock.com/rails/Object/try)。为了简化故事 - 如果特定对象上不存在方法

,则返回nil而不是引发异常

答案 1 :(得分:1)

如果您只想确保保存,可以使用setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE)执行以下操作:

ensure

更多信息: http://blog.rubybestpractices.com/posts/rklemme/003-The_Universe_between_begin_and_end.html