我在rails中有哈希哈希,比如:
{"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:...>} ...
因此,正如您所看到的,在此哈希中,有许多哈希表示战斗转向。还有一个哈希条目,其中包含一个完整的object.attributes('攻击者'条目')。
现在,我想在Rails中使用JQuery来表示。我试过用类似的东西:
var combat_stats = <%= array_or_string_for_javascript(@combat) %>;
获取Javascript中的值。这有效,但有一个重要问题。它似乎创建了一个字符串数组。因此,内部哈希现在是字符串,这使我无法在javascript中解析。
我的问题是,如何访问以下值:
turn['attacker']['name'] or turn['attacker_hp']
我可以轻松地在Rails视图中的@ combat.each循环中做什么?
答案 0 :(得分:19)
您熟悉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将返回“string”
等...
编辑:
也许您需要使用@combat.to_json.html_safe
,因为当您使用&lt;%=%&gt;时,它应该被html解析
答案 1 :(得分:5)
console.log(JSON.parse('<%= @link.errors.messages.to_json.html_safe%>'))
返回对象
所以
JSON.parse('<%= @link.errors.messages.to_json.html_safe%>')
可以用作js对象