Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 限制可以更新哪些用户属性_Ruby On Rails - Fatal编程技术网

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
,所以我之前的评论是错误的<代码>。除
外,其他功能都可以使用。