Как я могу спасти метод, когда есть ноль пользователя? - PullRequest
0 голосов
/ 29 февраля 2012

Время от времени у меня есть user.id == ноль.И когда это происходит, мой поиск не удался.Какой самый практичный способ спасти этот код?и что вы обычно возвращаете, когда это происходит?

def lookup  
  @data[user.id]["email"]
end

Скажите, что почтовый метод использует возвращаемое значение

email(lookup).deliver

Ответы [ 2 ]

4 голосов
/ 29 февраля 2012
begin
  @data[user.id]["email"]
rescue Exception
  nil
end

, или вы можете сделать

@date[user.try(:id)]["email"]

, который просто вернет ноль, если пользователь ноль, и вы называете id для него.

Настоящая проблема здесь заключается в том, чтоу вас есть запах кода.Какой бы класс ни владел методом lookup, он слишком много знает о деталях реализации @data.Я не могу рекомендовать исправление без дополнительного кода, но я бы предложил написать метод / класс, который знает только, как извлечь письмо из данных.Что-то вроде:

@data.get_email_for_user

Таким образом, этому классу не придется беспокоиться о том, является ли пользователь нулевым.Нужно только побеспокоиться о возвращении электронной почты.

0 голосов
/ 29 февраля 2012

user.id.nil? ? <default return val here> : @data[user.id]["email"]

Или, если вы не хотите ничего возвращать:

@data[user.id]["email"] if user.id

...