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

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?

4b9b3361

Ответ 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