由于某种原因,我的控制器创建的任何json都会生成一个json数组,但不会生成一个对象。我想知道它的正常行为吗?如果它我怎样才能获得我想要的东西。
控制器
def index
@articles = Article.all
respond_to do |format|
format.json { render :json => @events }
end
end
现在我真正得到的是
[{"allday":true,"created_at":"2013-01-10T23:49:19Z","customer_id":1,"description":"A meeting tomorrow between Prime Minister","id":35}]
现在然而我想首先看到标准json的对象跟随
{ "Article":{"allday":true,"created_at":"2013-01-10T23:49:19Z","customer_id":1,"description":"A meeting tomorrow between Prime Minister","id":35}}
答案 0 :(得分:1)
您可以构建一个ruby对象或哈希,它反映您想要的json对象的结构并进行渲染。
def index
@articles = Article.all
respond_to do |format|
format.json { render :json => @events.map { |e| { Article: e } } }
end
end
这会给你类似的东西
[{ "Article":{"allday":true,"created_at":"2013-01-10T23:49:19Z","customer_id":1,"description":"A meeting tomorrow between Prime Minister","id":35}}]
答案 1 :(得分:1)
您应该启用ActiveRecord::Base.include_root_in_json
以获得全局所需的行为。来自the docs:
选项
include_root_in_json
控制的顶级行为as_json
。如果为true(默认值)as_json
将发出单个根节点 以对象的类型命名。例如:user = User.find(1) user.as_json # => { "user": {"id": 1, "name": "Konata Izumi", "age": 16, # "created_at": "2006/08/01", "awesome": true} } ActiveRecord::Base.include_root_in_json = false user.as_json # => {"id": 1, "name": "Konata Izumi", "age": 16, # "created_at": "2006/08/01", "awesome": true}
也可以通过将
:root
选项设置为false
来实现此行为,如下所示:user = User.find(1) user.as_json(root: false) # => {"id": 1, "name": "Konata Izumi", "age": 16, # "created_at": "2006/08/01", "awesome": true}