Подтвердить что ты не робот

Rails 3 передает массив рельсов функции javascript, которая использует массив javascript

Я пытаюсь передать массив рельсов функции javascript. Затем функция будет использовать значения массива в javascript, поэтому мне нужно сохранить массив.

Вот как я передаю свой массив:

"graphit([<%[email protected]_values.join(",") %>])"

Это создает это в HTML

"graphit([#&lt;Mile:0x6ff0cf0&gt;,#&lt;Mile:0x6ff0c18&gt;,#&lt;Mile:0x6ff0b58&gt;])"

Которые не являются значениями, они должны быть десятичными числами. Я предполагаю, что это потому, что это ссылка на массив, так что я почему-то получаю испорченные значения. Если я делаю что-то вроде to_s, я вижу значения, но у него есть другие вещи, такие как таблица, и там же имя.

Кто-нибудь знает, как я могу получить этот массив рельсов в javascript-функции как массив?

Заранее благодарим за помощь.

4b9b3361

Ответ 1

Переход к JSON, как предполагалось, пару раз в этом посту всегда давал мне что-то вроде этого.

[{ "мили": { "дата": "2011-05-20", "миль на галлон": "18,565887006952" }}, { "мили": { "дата": "2011-06-01", "миль на галлон": "18,471164309032" }}]

То, что я действительно хотел, было именно этим... [[2011-05-20, 18.56] [2011-06-01, 18.47]]

Поэтому я обработал его с помощью помощника.

  def chart_values()
    @chart_values = '['
    @mpg_values.each do |m|
      @chart_values = @chart_values+'['+m.date.to_s+', '+m.mpg.round(2).to_s+'],'
    end
    @chart_values = @chart_values+']'
  end

Затем передается chart_values ​​() в javascript.

Скорее всего, это не лучшее решение, но оно дало мне нужные значения в нужном формате.

Ответ 2

Так как это все еще кажется проблемой, и никто не разрешил ее. Здесь идет

var js_array = [<%= raw @object.to_json %>];

Ответ 3

Использовать метод Ruby collect.

Более чистая версия вашего решения Xaxum будет примерно такой:

def chart_values
  @mpg_values.collect do |mpg_value|
    [ mpg_value.date.to_s, mpg_value.mpg.round(2).to_f ]
  end
end

Метод collect автоматически генерирует массив любого результата, в результате чего вы получите что-то вроде этого:

[ 
  [2011-05-20, 18.56], 
  [2011-06-01, 18.47]
]

Я также изменил значение mpg, чтобы использовать to_f, которые предоставляют число вместо строки.

Ответ 4

Если вы используете HAML, вы можете просто сделать это:

var js_array = #{object};