两种不同的as_json方法

时间:2015-01-26 19:19:01

标签: ruby-on-rails ruby json

我希望以两种不同的方式呈现我的json。我现在重写了我的as_json方法,以json形式显示一个完整的对象,如下所示:

{
    prop1: stuff,
    prop2: stuff,
    innerthings: {
        {
            prop1:stuff,
            prop2:stuff
        }
        {
            prop1:stuff,
            prop2:stuff
        }
    }
}

as_json看起来像:

  #Renders json
  def as_json(options={})
    super(
        :except => [:created_at, :updated_at],
        :include => [{:innerthings = > {
                :except => [:created_at, :updated_at]
}}]

    )
  end

我还希望有第二个选项来渲染:

{
    prop1:stuff,
    prop2:stuff,
    countinnerthings:10
}

当前使用下面的代码时,我得到第一个渲染:

respond_to do |format|
  format.json { render json: @thing}
end

我也希望能够使用as_list这样的东西进行渲染,我可以在下面这样的情况下使用它来渲染一个简单的对象列表。

respond_to do |format|
    format.json { render json: @things.as_list }
end

在ruby on rails上有一种简单的方法吗?

2 个答案:

答案 0 :(得分:3)

而不是滚动自己的as_json方法。看看ActiveModel Serializers。我认为它将满足您的用例并帮助组织您的代码。

答案 1 :(得分:1)

您只需定义as_list方法

即可
def as_list
   {
    prop1: "stuff"
   }
end

如果您需要使用包含等,可以使用as_json方法拨打at_list。如前所述,序列化器通常是更好的选择。