铁轨中的强力参数

时间:2015-06-16 15:34:47

标签: ruby-on-rails security ruby-on-rails-4 mass-assignment

我删除了以下行的质量分配漏洞:

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_idparams.permit(:id, :name),错误已被删除。但是正在添加attr_accessible正确的方法,因为我们写了强大的参数来删除这一行,不是吗?

3 个答案:

答案 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