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

Ruby Protobuf构造消息时报错未知字段event_data问题求助

错误原因

Ruby 版 Protobuf 对 oneof 类型字段的初始化规则和其他语言不同:oneof 本身是字段分组标识,不是可赋值的字段名,不能将event_data作为参数 key 传入构造方法。

正确写法

你可以直接将 oneof 分组下的具体字段作为顶层参数传入,Protobuf 会自动识别并完成 oneof 分支的赋值,有两种常用写法:

写法1:直接传嵌套参数(更简洁)

message = Myapp::Event.new(
  entity: :SECOND,
  name: "started",
  second_event_data: {
    metadata_url: "local-dev-url"
  }
)

写法2:显式创建子消息实例

# 先构造子消息
second_data = Myapp::Event::SecondEventData.new(metadata_url: "local-dev-url")
# 构造主消息
message = Myapp::Event.new(
  entity: :SECOND,
  name: "started",
  second_event_data: second_data
)

验证

构造完成后可以通过message.event_data获取到你传入的SecondEventData实例,确认赋值正确:

puts message.event_data.metadata_url # 输出 local-dev-url
puts message.event_data.class # 输出 Myapp::Event::SecondEventData

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:18:02