У вас две проблемы.Во-первых, ваш помощник не возвращает значение, которое может быть включено в представление конструкцией <%= ... %>
.
Вызов .each
возвращает объект, для которого он имеетвызывается, в этом случае это будет feed.xml_fields
, и он НЕ возвращает отдельные значения, рассчитанные блоком.
Вторая проблема заключается в том, что puts
в Rails не помещает текств визуализированном виде - это не PHP.
Я не очень уверен, какой именно вывод вы ожидаете, но если вы хотите вернуть первое «поле» с «тегами», то вы можетесделать это:
def list_fields(feed)
f = feed.xml_fields.detect {|field| field.tags? }
f ? f.tags : "(none)"
end
Если вы хотите перечислить все теги и вернуть строку "(нет)", если тегов нет, используйте что-то вроде этого:
def list_fields(feed)
f = feed.xml_fields.select {|field| field.tags? }.map {|field| field.tags }
f.empty? ? "(none)" : f.join(", ")
end
Если вы хотите объединить поля с некоторой HTML-разметкой, например <br/>
, используйте это:
def list_fields(feed)
f = feed.xml_fields.select {|field| field.tags? }.map {|field| h(field.tags) }
f.empty? ? "(none)" : f.join("<br/>").html_safe
end
Обратите внимание, что есть два изменения: индивидуальные tags
значения экранируются функцией h
, а затем присоединяемая строка помечаетсякак уже очищенный.В этом случае представление больше не будет экранировать строку.
Если вы действительно хотите использовать что-то вроде puts
в представлениях или помощниках, тогда вы можете прочитать о методе concat .