Rails使用模型根呈现JSON数据

时间:2010-08-26 16:52:51

标签: ruby-on-rails json

我在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的所有内容,我不想为此项目执行此操作。

在这种情况下,我希望能够根据具体情况进行此操作。

我该怎么做?提前谢谢。

3 个答案:

答案 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