升级Rails 5后联系人功能失效:ActiveModel::ForbiddenAttributesError报错
解决Rails 5中ActiveModel::ForbiddenAttributesError的问题
嘿,这个问题我太熟悉了!从Rails 4开始,框架引入了**强参数(Strong Parameters)**机制,专门用来防范批量赋值的安全漏洞,所以你直接用params[:contact]传给Contact.new就会触发这个错误——Rails现在要求你明确告诉它哪些属性是允许被批量赋值的。
下面是具体的修复步骤:
在ContactsController里添加强参数方法
打开你的ContactsController,在类的末尾(通常放在私有方法区域)添加这个方法,把所有需要允许赋值的属性列进去:private def contact_params params.require(:contact).permit( :email, :name, :body, :contact, # 对应你模型里定义的attribute :contact :contactable_id, :contactable_type # 多态关联必需的两个属性 # 如果还有其他需要赋值的属性,也一起添加进来 ) end修改create动作的代码
把原来报错的那行:@contact = Contact.new params[:contact]替换成:
@contact = Contact.new(contact_params)
这样修改后,Rails就会允许你批量赋值这些指定的属性,错误应该就消失了。另外如果需要手动关联contactable对象,记得在保存前补充赋值代码,比如:
@contact.contactable = current_user # 或者你需要关联的其他实例
内容的提问来源于stack exchange,提问作者Mohamed Mahdi Allani
相关产品推荐
相关产品推荐

