我有一个静态JSON文件,想要在.html.erb
模板中迭代它,例如,
<% @data.each do |x| %>
<%= x['method'] %>
<% end %>
但是我遇到了如下错误。
undefined method `each' for #<String:0x007ffb11e33de8>
Rails似乎将JSON解释为字符串。
控制器
def index
@data = File.read("#{Rails.root}/data/docs.json")
end
docs.json
[
{method: "POST", usage: "xyz"},
{method: "DELETE", usage: "abc"},
{method: "GET", usage: "mno"}
]
这很令人困惑,因为在我的文本编辑器中,我可以简单地迭代json对象,如
data.each {|x| p x}
任何人都可以解释为什么这在Rails应用程序中的工作方式不同吗?
答案 0 :(得分:4)
首先你应该解析一个Json文件,因为File.read
返回一个字符串对象,这就是为什么会引发错误undefined method 'each' for #<String:0x007ffb11e33de8>
:
def index
@data = JSON.parse(File.read("#{Rails.root}/data/docs.json"))
end
Also your file is not a valid JSON notation.
应该是:
[
{ "method": "POST", "usage": "xyz"},
{"method": "DELETE", "usage": "abc"},
{"method": "GET", "usage": "mno"}
]