【问题标题】:Ruby to_json method includes methods even when asked not toRuby to_json 方法包括方法,即使被要求不要
【发布时间】:2010-08-15 00:06:28
【问题描述】:

我正在使用 to_json,包括关联。 但是,生成的 json 对象包含关联对象的所有方法,即使我要求它排除方法。

我尝试过以下方法:

render :json => @entries.to_json(:include => {:labels => {:only => [:label_id, :name], :methods => []}})
render :json => @entries.to_json(:include => {:labels => {:only => [:label_id, :name], :methods => :none}})
render :json => @entries.to_json(:methods => [], :include => {:labels => {:only => [:label_id, :name], :methods => []}})

我得到以下对象:

"entry": {
    "id" : "1",
    "other property of entry" : "value",
    ...
    "labels" : {
        "0" : {
            "name" : "animals",
            "label_id" : "2",
        },
        "1" : {
            "name" : "furry animals",
            "label_id" : "5",
        },
        "_each" : "... method properties",
        "_reverse" "... method properties",
        etc...
     }
}

因此,“条目”的每个 json 对象都已正确创建,关联的标签也包括在内,但我无法让它省略“标签”中的方法。

关于如何正确执行此操作的任何想法?

谢谢。


编辑:

@nirvdrum,感谢您的建议。 不幸的是,这并不能解决问题。

我已将此添加到模型中

def as_json(options={})
  super(:include => {:labels => {:only => [:label_id, :name]} } )
end

控制器会这样做:

render :json => @entries

结果是一样的。 任何其他建议将不胜感激。

【问题讨论】:

    标签: ruby-on-rails ruby


    【解决方案1】:

    我不知道如何使用 to_json 来完成,但你应该可以使用 as_json 轻松完成,现在这是自定义 JSON 输出的首选方式。

    关于 as_json 和 to_json 如何交互的更全面的处理可以在Jonathan Julian's weblog 上找到。

    【讨论】:

      【解决方案2】:

      您的标签对象的 to_json 或 as_json 是什么样的?

      过去,我重写了 as_json 方法,并忽略了进来的选项。

      如果你这样做:

      def as_json(opts={})
        super(:include=>[:name, :address])
      end
      

      那么参数将被完全忽略。为了解决这个问题,您可以:

      def as_json(opts={})
        opts.merge!(:include=>[:name, :address])
        super(opts)
      end
      

      只是在黑暗中拍摄。让我知道那是否在正确的附近。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-02-14
        • 1970-01-01
        • 2011-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-30
        • 2011-02-27
        相关资源
        最近更新 更多