Rails хеш хешей в Javascript
У меня есть хэш хэшей в рельсах, например:
{"round"=>1, "turn"=>1, "attacker_hp"=>11220, "defender_hp"=>205, "damage"=>95, "attacker"=>#<User id: 2, email:...>}, {"round"=>1, "turn"=>2, "attacker_hp"=>11220, "defender_hp"=>205, "damage"=>95, "attacker"=>#<User id: 1, email:...>} ...
Итак, как вы можете видеть, в этом хеше есть ряд хэшей, которые представляют собой боевой ход. Также есть запись хэша, содержащая в ней полный объект. (В записи "атакующего" ).
Теперь я хочу представить это с помощью JQuery в Rails. Я попытался использовать что-то вроде:
var combat_stats = <%= array_or_string_for_javascript(@combat) %>;
чтобы получить значения в Javascript. Это работает, но есть важная проблема. Кажется, он создает массив строк. Таким образом, внутренние хэши теперь являются строками, что делает невозможным анализ в javascript.
Мой вопрос в том, как я могу получить доступ к таким значениям, как:
turn['attacker']['name'] or turn['attacker_hp']
как я мог бы легко сделать в цикле @combat.each внутри представления Rails?
Ответы
Ответ 1
Вы знакомы с структурой JSON? Вы можете использовать @combat.to_json
, а затем работать с json вместо массива.
С этим вы можете легко получить доступ к значениям, как в rails, например:
var foo = {
bar: 1,
x: [1, 2, 3],
y: {
a: "string"
}
}
foo.bar или foo [ "bar" ] вернет 1
foo.x вернет массив [1,2,3]
foo.y.a вернет строку "
и т.д...
Edit:
Возможно, вам понадобится использовать @combat.to_json.html_safe
, поскольку он должен быть обработан html, когда вы используете <% =% >
Ответ 2
console.log(JSON.parse('<%= @link.errors.messages.to_json.html_safe%>'))
возвращает объект
поэтому
JSON.parse('<%= @link.errors.messages.to_json.html_safe%>')
может использоваться как объект js