最近一个项目中,使用到比较多的json,某个model因为一些原因,需要覆盖掉to_json,我简单的通过alias_method做了一个包装,代码如下:
单元测试没有问题,但运行rails应用时,出现如下异常信息:
跟踪后发现,activerecord的to_json方法有一个参数options, to_json(options = {}),所以出现参数不匹配的异常,修改代码如下:
运行通过。
def to_json_with_ext
"{\"data\":#{self.to_json_without_ext}}"
end
alias_method_chain :to_json, :ext
单元测试没有问题,但运行rails应用时,出现如下异常信息:
wrong number of arguments (1 for 0)
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/json/encoding.rb:21:in `to_json'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/json/encoding.rb:21:in `send'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/json/encoding.rb:21:in `encode'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/json/encoding.rb:31:in `raise_on_circular_reference'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/json/encoding.rb:20:in `encode'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/json/encoders/enumerable.rb:10:in `to_json'
/usr/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/json/encoders/enumerable.rb:10:in `map'
跟踪后发现,activerecord的to_json方法有一个参数options, to_json(options = {}),所以出现参数不匹配的异常,修改代码如下:
def to_json_with_ext(options = {})
"{\"data\":#{self.to_json_without_ext(options)}}"
end
alias_method_chain :to_json, :ext
运行通过。
本文介绍了一个Rails项目中遇到的问题:由于需要覆盖Model的to_json方法,最初尝试使用alias_method_chain简化过程,但在运行时遇到了参数数量不匹配的错误。经过调试,发现了ActiveRecord的to_json方法接受一个选项参数,调整了覆盖方法以匹配这一签名,最终解决了问题。
3222

被折叠的 条评论
为什么被折叠?



