Domanda

Sto utilizzando l'API dei grafici di Google per generare un grafico a torta nella mia applicazione Rails. Tuttavia, sto riscontrando un problema nel passaggio delle variabili locali al def nell'helper. Il def accetta un array 2D di coppie [etichetta, valore]. Non mi piace quando provo a passare una variabile locale come valore. Questi sono calcolati in anticipo e sono in formato valuta. Mettere la variabile tra virgolette o in # {} non funziona neanche.

application_helper.rb

  def pie_chart(data, options = {})
    options[:width] ||= 250
    options[:height] ||= 100
    options[:colors] = %w(F5DD7E 0DB2AC FC8D4D FC694D FABA32 704948 968144 C08FBC ADD97E)
    dt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-."
    options[:divisor] ||= 1
    options[:title] ||= "Energy Costs"

    while (data.map { |k,v| v }.max / options[:divisor] >= 4096) do
      options[:divisor] *= 20
    end

    opts = {
      :cht => "p",
      :chd => "e:#{data.map{|k,v|v=v/options[:divisor];dt[v/64..v/64]+dt[v%64..v%64]}}",
      :chl => "#{data.map { |k,v| CGI::escape(k)}.join('|')}",
      :chs => "#{options[:width]}x#{options[:height]}",
      :chco => options[:colors].slice(0, data.length).join(','),
      :chf => "bg,s,FFFFFF00",
      :chtt => "#{options[:title]}"
    }

La chiamata def nella vista:

<%= pie_chart( [["Light Cost", #{light_cost}], ["Small Appliance Cost", #{sm_appl_cost}]], :width => 550, :height => 200) %>

Come posso passare le variabili locali?

È stato utile?

Soluzione

Qual è l'errore che ricevi? Dovresti essere in grado di chiamarlo come:

<%=
  pie_chart(
    [
      ["Light Cost", light_cost],
      ["Small Appliance Cost", sm_appl_cost]
    ],
    { :width => 550, :height => 200 }
  )
%>

Ho aggiunto {} attorno all'hash solo per renderlo più chiaro ed esplicito.

L'uso di # {var} non è il modo di farlo qui perché serve per la sostituzione in una stringa, ad es. " Ecco il valore: # {var} " .

Altri suggerimenti

Quindi quel codice vuole sicuramente valori numerici, ma # {} inizierà solo un commento a meno che non sia usato all'interno di una stringa, e tu non vuoi una stringa lì.

E in realtà, il diagramma a torta come scritto sembrerebbe prendere o un array 2D come dici OPPURE un hash, se l'unico uso è con 2 variabili < code> .map iteratori. Quindi dovresti essere in grado di usare [[" str1 " ;, light_cost], [" str2 " ;, sm_appl_cost]] o {'str1' = > light_cost, 'str2' = >. sm_appl_cost}

Tuttavia, devi assicurarti che quei locali siano numerici. Prova a usare .to_i o .to_f se non lo sono.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top