Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 在来自控制器的\u json中包含\u根\u_Ruby On Rails_Json - Fatal编程技术网

Ruby on rails 在来自控制器的\u json中包含\u根\u

Ruby on rails 在来自控制器的\u json中包含\u根\u,ruby-on-rails,json,Ruby On Rails,Json,我试图将结果返回到json不包含根的视图 我不想在这个模型的所有动作上都设置这个,所以我试图避免设置 ActiveRecord.Base.include_root_in_json = false ActiveRecord.Base.include\u root\u in\u json=false 我希望我能做到 @task = Tasks.all @task.include_root_in_json = false @task=Tasks.all @task.include_root_in_j

我试图将结果返回到json不包含根的视图

我不想在这个模型的所有动作上都设置这个,所以我试图避免设置 ActiveRecord.Base.include_root_in_json = false ActiveRecord.Base.include\u root\u in\u json=false

我希望我能做到

@task = Tasks.all @task.include_root_in_json = false @task=Tasks.all @task.include_root_in_json=false 为了得到我需要的响应,但这似乎不起作用,返回一个“未定义的方法include\u root\u in_json=for”#
是否有一种很好的方法可以做到这一点???

从源代码来看,似乎没有一种方法可以在每个方法调用的基础上更改
include\u root\u in_json
的值。除非我遗漏了什么,否则最好的方法是在调用前更改类变量,然后再更改回来:

ActiveRecord::Base.include_root_in_json = false
render :json => @task
ActiveRecord::Base.include_root_in_json = true
这很难看,但“include root in json”选项的设计似乎没有考虑到这种灵活性。它也可能导致与其他请求的竞争条件,但我不确定这一点。或者,您可以始终将其设置为false,并在需要时使用根键手动创建哈希:

# this case
render :json => @task

# some other case
render :json => { :my_model => @my_model.to_json }

这是一个老问题,但答案没有更新,Rails 3.2填补了这个空白

使用Rails 3.2,您现在可以使用:

my_model.to_json(:root => false)
如果不希望包含根密钥

它变得更好,因为我刚刚用一个数组对它进行了测试,所以您可以:

Model.all.to_json(:root => true)

谢谢你,吉米。你能解释一下“调用前更改类变量,调用后更改回”是什么意思吗??我不确定我是否明白。在他疯狂的头脑中谁想到了这个?!?!为什么不使用此设置向to_json添加一个选项?我有时不明白…真是可笑。这就防止了使用json的任何代码的互操作性。莫名其妙。这显然是正确的答案!不是5票的:)