You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ruby中调用super时如何在as_json内追加参数且不覆盖用户配置

解决方法

你原来的写法直接覆盖了methods的配置值,才会导致用户传入的参数丢失,只要先读取已有配置再做数组合并即可:

def as_json(options = {})
  # 复制options避免修改原传入对象产生副作用
  opts = options.dup
  # 统一转成数组后合并,兼容用户不传methods、或传单个Symbol的情况
  opts[:methods] = Array(opts[:methods]) + [:name, :title]
  super(opts)
end

说明

  • 加options = {}默认值是为了兼容无参调用as_json的场景,避免报nil相关错误
  • Array()方法可以把nil、单个Symbol、已有数组都统一转成数组格式,不需要额外做判空处理
  • 最终合并后的methods会同时包含用户传入的配置和你自定义的name、title字段,其余only、except等其他配置都不会被修改

内容的提问来源于stack exchange,提问作者Ashbury

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 03:12:03