Vous avez deux problèmes. Le premier est que votre assistant ne renvoie pas la valeur qui pourrait être incluse dans la vue par la construction <%= ... %>
.
L'appel .each
retourne l'objet sur lequel il a été appelé, dans ce cas, il serait feed.xml_fields
, et il ne retourne pas les valeurs individuelles calculées par le bloc.
Le deuxième problème est que puts
dans Rails ne place pas le texte dans la vue rendue - ce n'est pas PHP.
Je ne suis pas très confiant que la sortie exacte que vous attendez, mais si vous voulez retourner le premier « champ » qui a « balises », alors vous pouvez le faire:
def list_fields(feed)
f = feed.xml_fields.detect {|field| field.tags? }
f ? f.tags : "(none)"
end
Si vous voulez la liste toutes les balises et de retourner la chaîne « (aucun) », s'il n'y a pas de balises, puis utilisez quelque chose comme ceci:
def list_fields(feed)
f = feed.xml_fields.select {|field| field.tags? }.map {|field| field.tags }
f.empty? ? "(none)" : f.join(", ")
end
Si vous souhaitez rejoindre les champs avec quelques balises HTML, comme un <br/>
, puis utilisez ceci:
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
Notez qu'il existe deux changements: les valeurs sont tags
individuelles se sont échappés par la fonction h
, puis la chaîne joint est marquée comme étant déjà aseptisé. Dans ce cas, la vue n'échappe pas à nouveau à la chaîne.
Si vous voulez vraiment utiliser quelque chose comme puts
dans les vues ou les aides, alors vous pouvez lire sur la méthode concat.
Merci, j'essayais d'accomplir la dernière de vos suggestions. Je suis un peu confus sur la syntaxe. Avec ce 'f.join (", ")', je veux réellement les joindre de sorte que chacun imprime sur une nouvelle ligne. J'ai essayé à la fois 'f.join (" \ n ")' et 'f.join ("
")' en vain. – Paul
J'ai mis à jour la réponse. Le dernier exemple montre comment placer des balises HTML dans la chaîne retournée par helper. – Arsen7
J'ai compris, merci! – Paul