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

Rails保存关联记录时strong parameters未被识别触发ActiveModel错误问题

问题原因

  • 核心错误出现在userdiscount方法的第一行赋值逻辑:你已经定义了名为articlediscount_params的强参数过滤方法,但你在方法内直接将同名变量赋值为原始未过滤的params[:articlediscount],后续更新、创建操作传入的都是这个未经过permit放行的原始参数哈希,自然触发ActiveModel::ForbiddenAttributesError。
  • 你修改require部分后报错仍然存在,是因为你全程没有调用自己写的强参数方法,修改方法内部的逻辑完全不会生效。

解决方法

将userdiscount方法内的参数赋值逻辑修改为调用你实现的强参数方法即可,为了避免变量名和方法名冲突,建议直接修改参数变量名:

def userdiscount
  # 调用强参数方法获取过滤后的合法参数
  articlediscount_params = articlediscount_params()
  # 更推荐的写法:换变量名避免命名冲突
  # filtered_params = articlediscount_params
  initialise_article_and_params(articlediscount_params)
  puts articlediscount_params
  if articlediscount_params[:id].present?
    @articlediscount = Articlediscount.find(articlediscount_params[:id].to_i)
    @articlediscount.update!(articlediscount_params)
  else
    @articlediscount = Articlediscount.create!(articlediscount_params)
  end
end

private
def articlediscount_params
  params.require(:articlediscount).permit(:article_id, :user_id, :discounted_price, :discount, :shop_id)
end

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:04