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

use*_*461 3 ruby activerecord ruby-on-rails 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
Run Code Online (Sandbox Code Playgroud)

dja*_*ski 7

一般来说,什么可能是你的问题的解决方案是try方法(http://apidock.com/rails/Object/try).为了简化故事 - 如果特定对象上不存在方法,则返回nil而不是引发异常