Ruby on rails 限制可以更新哪些用户属性
我不想允许用户更新其Ruby on rails 限制可以更新哪些用户属性,ruby-on-rails,Ruby On Rails,我不想允许用户更新其:name。我发现了这个问题,但答案对我来说并不适用。我使用的是Rails 4。我可能只是语法错误。我无法使@user.update_属性(params[:user])正常工作。仅限:@user.update_属性(用户参数)。我没有在我的编辑表单中包含:name,但我的理解是(??)用户仍然可以自己通过浏览器传递它,并且可以使用我的当前代码更改:name class UsersController < ApplicationController def edit
:name
。我发现了这个问题,但答案对我来说并不适用。我使用的是Rails 4。我可能只是语法错误。我无法使@user.update_属性(params[:user])
正常工作。仅限:@user.update_属性(用户参数)
。我没有在我的编辑表单中包含:name
,但我的理解是(??)用户仍然可以自己通过浏览器传递它,并且可以使用我的当前代码更改:name
class UsersController < ApplicationController
def edit
@user = User.find(params[:id])
end
def update
@user = User.find(params[:id])
@user.update_attributes(user_params)
if @user.save
flash[:success] = "Profile updated"
redirect_to @user
else
flash[:danger] = "Profile update Unsuccessful"
redirect_to 'edit'
end
end
private
def user_params
params.require(:user).permit(:name, :email, :email_confirmation, :password, :password_confirmation)
end
class UsersController
有多种方法可以确保用户不会篡改您的业务规则。
由于您已经在使用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)
还有其他方法可以完成同样的事情,比如利用已经允许的属性,但这种方法似乎更简单。有多种方法可以确保用户不会篡改您的业务规则。 由于您已经在使用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)
还有其他方法可以完成同样的事情,比如利用已经允许的属性,但这种方法似乎更简单。我希望他们能够创建
:name
最初使用新建/创建。。。我只是不想让他们在那之后能够更新/编辑他们的:name
。谢谢这项工作。有人知道除了问题中链接的
之外,是否仍然适用于Rails 4吗?@TimmyVonHeiss我刚刚意识到,参数
继承自ActiveSupport::HashWithInferenceAccess
,所以我之前的评论是错误的<代码>。除了
应该可以工作。我希望他们能够创建:name
最初使用新建/创建
。。。我只是不想让他们在那之后能够更新/编辑他们的:name
。谢谢这项工作。有人知道除了问题中链接的
之外,是否仍然适用于Rails 4吗?@TimmyVonHeiss我刚刚意识到,参数
继承自ActiveSupport::HashWithInferenceAccess
,所以我之前的评论是错误的<代码>。除
外,其他功能都可以使用。