Хм, это не совсем работает, если нет элемента is_primary
... Я все еще думаю ...
c.detect(&:is_primary).name
Хорошо, как насчет:
((a = c.detect(&:is_primary)) && a.name).to_s
Как это бывает, в шаблоне erb нормально, что выражение <%=
возвращает nil
, что просто приводит к пустой строке, поэтому для этого случая вы можете использовать:
(a = c.detect(&:is_primary)) && a.name
Обновление: Отвечая на первый комментарий, у меня есть тестовый пример, который я не опубликовал ...
class A; attr_accessor :is_primary, :name, :id; end
t = [A.new, A.new, A.new, (a = A.new; a.name = 'xyz'; a.is_primary = true; a)]
puts (a = t.detect(&:is_primary)) && a.name
puts ((a = [].detect(&:is_primary)) && a.name).to_s