首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Rails 4-如何从NoMethodError中拯救并继续尝试方法?

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

Stack Overflow用户
提问于 2015-06-01 17:53:07
回答 2查看 4.8K关注 0票数 3

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

我遇到了这样的问题:如果FullContact中的"person“不存在一列数据,它就会抛出一个NoMethodError,并且我无法将可能存在的其余数据保存到联系人中,因为我的方法会在出错时停止。

我如何才能从NoMethodError中拯救出来,让我的方法继续运行其余的呢?就像它跳过错误并尝试其他代码一样。我已经在我的救援代码中尝试过nextcontinue,但这是行不通的。

谢谢你的帮助。

代码语言:javascript
复制
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
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-06-01 17:58:31

通常,解决问题的方法是try方法(http://apidock.com/rails/Object/try)。为了简短起见,它返回零,而不是在特定对象上不存在方法时引发异常。

票数 7
EN

Stack Overflow用户

发布于 2015-06-01 19:01:07

如果您只想确保保存,可以使用ensure执行如下操作:

代码语言:javascript
复制
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!

  ensure
   save!
  end
end

更多信息:end.html

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30580012

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档