我删除了以下行的质量分配漏洞:
friend = Friend.find(params[:id])
friend.update_attributes(params[:name])
将其重写为:
friend = Friend.find(params[:id])
friend.update_attributes(params.permit(:name))
但这给了我这个错误:
ActiveModel::MassAssignmentSecurity::Error (Can't mass-assign protected attributes for Friend: name):
Unpermitted parameters: id
我知道为什么会收到此错误?
Edit :
我添加了attr_accessible :status_id
和params.permit(:id, :name)
,错误已被删除。但是正在添加attr_accessible
正确的方法,因为我们写了强大的参数来删除这一行,不是吗?
答案 0 :(得分:0)
尝试将代码更新为friend.update_attributes(params.permit(:name, :id))
允许该参数。
答案 1 :(得分:0)
你应该做
friend.update_attributes(params.require(:friend).permit(:name))
或将其置于私人方法
private
def object_params
params.require(:friend).permit(:name)
end
然后通过
致电friend.update_attributes object_params
编辑: 我假设你的参数看起来像
{friend:{name:'xxxxx'},id:xx}
答案 2 :(得分:0)
不要在模型中编写attr_accessible,Rails 4使用强参数。
试试这段代码。
friend = Friend.find(params[:id])
friend.update_attributes(friend_params)
private
def friend_params
params.require(:friend).permit!
end