Rails控制器将JSON对象视为字符串

时间:2016-05-31 15:23:45

标签: ruby-on-rails json

我有一个静态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应用程序中的工作方式不同吗?

1 个答案:

答案 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"}
]