2013-08-13 11 views
7

Ho il seguente modello burattino esempio:fantoccio template rimuovere l'ultimo comma

{ 
    "servers" : [ { 
    "port" : 9200, 
    "host" : "localhost", 

    "queries" : [ 
     <% @markets.each do |market| -%> 
     { 
     "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter" } ], 
     "obj" : "solr/market_<%= market %>:type=queryResultCache,id=org.apache.solr.search.LRUCache", 
     "attr" : [ "hits","hitratio" ] 
    }, 
    <% end -%> 
    ], 
    "numQueryThreads" : 2 
    } ], 
} 

applicandolo con mercato = [ 'UK', 'FR', 'IT'], ottengo il seguente:

{ 
    "servers" : [ { 
    "port" : 9200, 
    "host" : "localhost", 

    "queries" : [ 
      { 
     "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter" } ], 
     "obj" : "solr/market_UK:type=queryResultCache,id=org.apache.solr.search.LRUCache", 
     "attr" : [ "hits","hitratio" ] 
    }, 
      { 
     "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter" } ], 
     "obj" : "solr/market_FR:type=queryResultCache,id=org.apache.solr.search.LRUCache", 
     "attr" : [ "hits","hitratio" ] 
    }, 
      { 
     "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter" } ], 
     "obj" : "solr/market_IT:type=queryResultCache,id=org.apache.solr.search.LRUCache", 
     "attr" : [ "hits","hitratio" ] 
    }, 
     ], 
    "numQueryThreads" : 2 
    } ], 
} 

Il problema è l'ultima virgola, che lo rende una configurazione di solr non valida.

Invece di applicare markets.each, potrei usare market.map e join (','). ma come usare la mappa in questo caso?

posso usare carta come segue:

<%= @markets.map{ |market| "hello_"+market }.join(',') -%> 

questo sarebbe stampare hello_UK,hello_FR,hello_IT (notare che non abbiamo una virgola dopo hello_IT), ma avrei bisogno di qualcosa di simile:

{ 
    "servers" : [ { 
    "port" : 9200, 
    "host" : "localhost", 

    "queries" : [ 
     <% @markets.map |market| -%> 
     { 
     "outputWriters" : [ { "@class" : "com.googlecode.jmxtrans.model.output.StdOutWriter" } ], 
     "obj" : "solr/market_<%= market %>:type=queryResultCache,id=org.apache.solr.search.LRUCache", 
     "attr" : [ "hits","hitratio" ] 
    }, 
    <% }.join(',') -%> 
    ], 
    "numQueryThreads" : 2 
    } ], 
} 

questo non funziona.

quindi, come farlo funzionare? o come modificare il mio modello burattino per rimuovere l'ultima virgola?

+0

Il vecchio trucco consiste nell'inserire una voce fittizia fissa dopo l'elenco che non interrompe nulla. Forse è un'opzione. – Thilo

+0

Vorrei usare [jbuilder] (https://github.com/rails/jbuilder) – Stefan

+1

@Stefan, come si collegherebbe jbuilder per un modello di burattini? –

risposta

17

Questo è in realtà un problema di Ruby. Poiché questo è un array, basta cambiare il file .each con .each_with_index. Quindi puoi racchiudere la virgola finale in un controllo per vedere se il valore dell'indice corrente è inferiore alla dimensione dell'indice. Così

<% @markets.each_with_index |market, i| -%> 

e poi

}<%= ',' if i < (@markets.size - 1) %> 
+0

buona soluzione per il momento, grazie. –

+0

Non sono sicuro del perché lo definisci una soluzione alternativa; è una soluzione. Puppet utilizza il sistema di template ERB (Embedded Ruby) e Ruby è il codice che usi per manipolare i template. Tutto ciò che Puppet fa è impostare lo scope variabile e fornire alcune funzioni di supporto. Non può aiutarti con l'iterazione attraverso un array - questo è qualcosa che devi risolvere nel codice Ruby. Sono contento di essere stato di aiuto in entrambi i casi, ofc. – itsbruce

+1

funziona e risolve il problema, e sono molto grato che tu l'abbia condiviso. tuttavia, sarai d'accordo con me che è un brutto codice. forse è l'unico tipo di soluzione disponibile, nel qual caso vuol dire che erb è piuttosto scadente (per esempio, rispetto a Scala e al modello playframework). o forse c'è un modo per farlo senza questo trucco, magari usando @ markets.map {| market | ...} .join (','), ma non ho trovato il modo. –

Problemi correlati