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

Rails中为数组内对象批量新增键时赋值不生效如何解决?

问题原因及修复方案

错误1:Session查询写法错误

Session.where(:session_id => events_params[:session_id])返回的是ActiveRecord关系集合而非单条记录,调用ids得到的是符合条件的记录ID数组,如果你要获取单条Session的ID,应该使用find_by方法:

session = Session.find_by(session_id: events_params[:session_id])

错误2:直接修改ActionController::Parameters不生效

Rails的events_params是ActionController::Parameters实例,默认未被permit的键即使赋值也不会在输出中显示,且遍历得到的每个event参数实例直接赋值不会修改原参数内容。

修复后的代码

你可以先将参数转为普通哈希数组再操作:

# 查询单条session记录
session = Session.find_by(session_id: events_params[:session_id])
# 转为可修改的哈希数组
events = events_params[:events].map(&:to_h)
events.each do |event|
  event[:session_id] = session.id
end
# 回写参数或直接使用events数组
events_params[:events] = events
puts events_params[:events]

如果你需要保留Parameters实例结构,也可以对每个event参数执行permit!后再赋值:

session = Session.find_by(session_id: events_params[:session_id])
events_params[:events].each do |event|
  event.permit!
  event[:session_id] = session.id
end
puts events_params[:events]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 00:30:00