Я бы использовал что-то подобное для этой цели:
= [[l1, c1], [l2, c2], [l3, c3]].map{ |l, c| link_to(l) if c }.compact.join('|')
или
= [(link_to(l1) if c1),(link_to(l2) if c2),(link_to(l3) if c3)].compact.join('|')
Последнее немного неуклюже, но дело вкуса. Оба отлично работают для фильтрации ненужных ссылок и объединения остальных из них с |
.
Хотя, если ваши условия нетривиальны и у вас их довольно много, было бы лучше перенести эту логику за пределы поля зрения в контроллер или некоторый помощник (в зависимости от ситуации).
И если у вас есть какой-то общий метод для проверки, следует ли отображать ссылку или нет, скажем, show?(link)
помощник, то все становится немного лучше, и вы можете сделать это так:
= [l1, l2, l3, l4].map{ |l| link_to(l) if show?(l) }.compact.join('|')
или как это:
= [l1, l2, l3, l4].select{ |l| show?(l) }.map{ |l| link_to(l) }.join('|')