我不想让用户更新他们的:name
。我找到了question for Rails version 3,但答案对我不起作用。我正在使用Rails 4.我可能只是有错误的语法。我无法让@user.update_attributes(params[:user])
工作。只有1个}}。我没有在我的编辑表单中包含@user.update_attributes(user_params)
,但我的理解(??)是用户仍然可以通过浏览器本身传递它,并且使用我当前的代码可以更改:name
。
:name
答案 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)
还有其他方法可以完成相同的操作,比如使用已经允许的属性,但这种方式似乎更简单。