Как высушить рубиновую условную структуру, необходимую для Rails - PullRequest
3 голосов
/ 18 сентября 2010

Я обнаружил, что мне часто приходится использовать структуру, чтобы избежать ошибки Rails, равной undefined method 'name' for nil:NilClass.

Структура выглядит следующим образом:

 if country.state
   country.state.name
 end

Это похоже на классическийслучай повторения с появлением country.state дважды в одном простом блоке.Есть ли способ высушить это?

Ответы [ 3 ]

4 голосов
/ 18 сентября 2010

Rails добавляет метод try к объекту, который имитирует объект # send, но не вызывает исключения, если объект возвращает nil.

Я думаю, что синтаксис

country.try(:state).name
2 голосов
/ 18 сентября 2010

Ну, не совсем.Одним из вариантов является установка andand gem , но введение зависимости для этого может быть немного сложным.

1 голос
/ 18 сентября 2010

Кроме использования более краткого синтаксиса:

country.state.name unless country.state.nil?

Я не думаю, что есть СУХОЙ способ сделать это с помощью предоставленной информации.Я бы сказал, что если вы не можете быть уверены, является ли country.state нулевым или нет, вы можете взглянуть на код, отвечающий за установку этого значения, и определить, является ли это нормальным случаем, или должен ли его перехватчик проверять в восходящем потоке.

...