我在Rails中有一些数据要呈现为JSON数据。我现在正在做的只是查找模型的所有实例并调用render:json => data。
data = Data.find(:all)
render :json => data
但是,Rails在每个JSON对象中包含模型名称。所以我的JSON数据最终看起来像这样:
[{modelname:{propertyName: 'value',...}},{modelname:{propertyName: 'value2',...}}]
而不是这个: [{propertyName的: '值',...},{propertyName的: '值2',...}]
模型名称始终相同,我不希望它在那里。
我更改了选项以在其中一个Rails初始值设定项中呈现JSON数据中的根,但这会影响我想要呈现为JSON的所有内容,我不想为此项目执行此操作。
在这种情况下,我希望能够根据具体情况进行此操作。
我该怎么做?提前谢谢。
答案 0 :(得分:13)
使用Rails 3,您可以使用active_model_serializers gem 1
允许您指定对象的无根呈现,如下所示:
render :json => data, :root => false
答案 1 :(得分:2)
我没有找到通过将选项传递给to_json方法来做到这一点的方法(我不相信有这样的选项)。你有更多的替代方法,任何继承自ActiveRecord :: Base的类都将包含include_root_in_json。
做这样的事情。
Data.include_root_in_json = false
data = Data.find(:all)
render :json => data
希望这能让你前进。
好的,让我们试试吧。
DataController < ApplicationControlle
private
def custom_json(data)
Data.include_root_in_json = false
data.to_json
Data.include_root_in_json = true
data
end
end
然后您的重定向将如下所示
data = Data.find(:all)
render :json => custom_json(data)
这是非常愚蠢的代码我希望我能完全想到别的东西。我问你这个问题:将模型名称包含在json数据中是什么意思?
答案 2 :(得分:1)
使用Rails 3,我发现这样做更好。覆盖模型中的as_json
并执行以下操作:
def as_json(options = {})
super(options.merge :methods => [:some_method_that_you_want_to_include_result], :include => {:child_relation => {:include => :grand_child_relation } })
end