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

