限制可以更新哪些用户属性

时间:2016-10-03 16:47:41

标签: ruby-on-rails

我不想让用户更新他们的:name。我找到了question for Rails version 3,但答案对我不起作用。我正在使用Rails 4.我可能只是有错误的语法。我无法让@user.update_attributes(params[:user])工作。只有1个}}。我没有在我的编辑表单中包含@user.update_attributes(user_params),但我的理解(??)是用户仍然可以通过浏览器本身传递它,并且使用我当前的代码可以更改:name

:name

1 个答案:

答案 0 :(得分:2)

确保用户不会篡改您的业务规则的方法不止一种。 由于您已经在使用Rails 4,因此您可以利用强参数来拒绝访问:name属性。

您可以为每个控制器操作设置不同的规则集:

def create_user_params
  params.require(:user).permit(:name,:email, :email_confirmation, :password, :password_confirmation)
end

def update_user_params
  params.require(:user).permit(:email, :email_confirmation, :password, :password_confirmation)
end

@user.create(create_user_params)
@user.update_attributes(update_user_params)
干涸了:

def allowed_update_attrs
 [:email, :email_confirmation, :password, :password_confirmation]
end

def allowed_create_attrs
 allowed_update_attrs + [:name]
end

def user_params
  params.require(:user)
end

@user.create user_params.permit(*allowed_create_attrs)
@user.update_attributes user_params.permit(*allowed_update_attrs)

还有其他方法可以完成相同的操作,比如使用已经允许的属性,但这种方式似乎更简单。