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
相关产品推荐
相关产品推荐

