Rails 3 передает массив рельсов функции javascript, которая использует массив javascript
Я пытаюсь передать массив рельсов функции javascript. Затем функция будет использовать значения массива в javascript, поэтому мне нужно сохранить массив.
Вот как я передаю свой массив:
"graphit([<%[email protected]_values.join(",") %>])"
Это создает это в HTML
"graphit([#<Mile:0x6ff0cf0>,#<Mile:0x6ff0c18>,#<Mile:0x6ff0b58>])"
Которые не являются значениями, они должны быть десятичными числами. Я предполагаю, что это потому, что это ссылка на массив, так что я почему-то получаю испорченные значения. Если я делаю что-то вроде to_s, я вижу значения, но у него есть другие вещи, такие как таблица, и там же имя.
Кто-нибудь знает, как я могу получить этот массив рельсов в javascript-функции как массив?
Заранее благодарим за помощь.
Ответы
Ответ 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};