Ho una lista di valori nelle coppie url/titolo che vorrei visualizzare. (Più specificamente, ogni oggetto ha il proprio elenco di collegamenti, alcuni con 0, alcuni con 1, altri con più.) Vorrei che comparissero in un elenco separato da virgole. Così ho scritto questo nel mio file .erb:Posso creare una serie di collegamenti usando link_to in Rails?
<%= links.map{|wl| link_to wl.title, wl.url}.join(', ') %>
Un po 'con mia grande sorpresa, questa visualizzato un elenco separato da virgole di il codice HTML per i link ho voluto creare; cioè stava prendendo tutte le parentesi angolari e le e commerciali e le codifica. Giusto per assicurarsi che non ci fosse nulla di divertente nelle funzioni di ordine superiore, ho provato una versione più imperativo:
<% a = [] %>
<% links.each do |wl| %>
<% a << link_to(wl.title, wl.url) %>
<% end %>
<%= a.join(', ') %>
con, ovviamente, lo stesso risultato. Ma non credo che sto abusando link_to
, perché se io modifico che a
<% links.each do |wl| %>
<%= link_to(wl.title, wl.url) %>,
<% end %>
allora crea in realtà collegamenti. È quasi esattamente quello che voglio, tranne che c'è una virgola extra dopo l'ultima. C'è qualcosa di magico sotto il cofano con link_to
che lo fa agire in modo diverso a seconda di dove si sta dirigendo il suo output? C'è un modo per bypassare quella magia? La semantica join
sarebbe esattamente ciò che voglio qui, e posso ovviamente capire come eseguire il rollover (usando each_index, credo) ma sembra una soluzione terribilmente pesante e non-Ruby a quello che deve essere un problema comune.
<% = links.map {| wl | link_to wl.title, wl.url} .join (',') .html_safe%>? – oldergod