В моем классе «Контакты» после того, как контакт создан с их адресом электронной почты, я стараюсь как можно больше извлекать данные контакта из API FullContact.Rails 4 - Как спасти от NoMethodError и продолжить метод?
У меня возникла эта проблема, если, если один столбец данных не существует для «человека» в FullContact, он генерирует NoMethodError, и я не могу сохранить остальные данные, которые потенциально существуют для контакт, потому что мой метод останавливается при ошибке.
Как я могу избавиться от NoMethodError и заставить мой метод продолжить работу над остальной частью? Например, чтобы просто пропустить ошибку и попробовать остальную часть кода. Я пробовал next
и continue
в моем коде спасения, но это не работает.
Спасибо за любую помощь.
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
Я не думаю, что это хорошая идея, чтобы спасти NoMethodError, как это ... вы можете в конечном итоге неприятности нарваться неожиданные поведения, такие, как вы сделать опечатку и по-прежнему спасает его и сохранить , и вы понятия не имеете, где это происходит от – Edward
Хорошая точка. Однако я в настоящее время все еще спасаю от NoMethodError, потому что я решил, что лучше всего извлекать данные из FullContact, учитывая, что мы платим за успешный вызов api. Открыта для альтернатив. – user2101461
вы также можете использовать. чтобы проверить, присутствует ли какой-либо метод, кроме попытки ударить его независимо и спасти от исключения (для приложений, отличных от rails) – Edward