Ruby on rails 如果用户是管理员,则使rails忽略输入

Ruby on rails 如果用户是管理员,则使rails忽略输入,ruby-on-rails,updates,roles,Ruby On Rails,Updates,Roles,我有一个用户对象,他可以更新他的个人资料,包括姓名、用户名、密码(空白)、密码确认(空白)、电子邮件、电子邮件确认(空白)、个人简历和图片url 我的模型规定必须填写所有的(空白)。但是,如果你的管理员和你的用户只是去用户页面更新用户的角色-你作为管理员不应该填写用户数据,你显然不知道 那么,我们该如何解决这个问题呢?我是否应该创建一个用户列表,旁边有一个下拉列表?从本质上说,这不是一个巨大的形式吗?如果是的话,这将如何创建 基本上:处理这种情况的最佳方法是什么 这是用户当前获得更新的方式

我有一个用户对象,他可以更新他的个人资料,包括姓名、用户名、密码(空白)、密码确认(空白)、电子邮件、电子邮件确认(空白)、个人简历和图片url

我的模型规定必须填写所有的
(空白)
。但是,如果你的管理员和你的用户只是去用户页面更新用户的角色-你作为管理员不应该填写用户数据,你显然不知道

那么,我们该如何解决这个问题呢?我是否应该创建一个用户列表,旁边有一个下拉列表?从本质上说,这不是一个巨大的形式吗?如果是的话,这将如何创建

基本上:处理这种情况的最佳方法是什么

这是用户当前获得更新的方式

  def update
    @user = User.friendly.find(params[:id])
    @user.update_attributes(user_update_params)
    if @user.save
      render :show
    else
      render :edit
    end
  end

  private

  def user_update_params
    params.require(:user).permit(:name, :user_name, :email, :email_confirmation, :password,
      :password_confirmation, :bio, :picture_url, :role)
  end 
在不进行验证的情况下更新属性,您需要此属性

看看这个

编辑:

谈到阅读文档

这是一篇文章的摘要

更新_属性(名称、值)公共

更新单个属性并保存记录。这尤其重要 用于现有记录上的布尔标志。还要注意

Validation is skipped.

Callbacks are invoked.

updated_at/updated_on column is updated if that column is available.

Updates all the attributes that are dirty in this object.
编辑:


如果您仍然需要使用此方法进行验证,请注意,它表示调用了回调,因此您可以编写自己的代码来验证输入,并按照说明使用回调。

真正的问题似乎是您的用户模型验证中存在逻辑错误

你似乎对表格有一个确认

validates :password, presence: true, confirmation: true
每次都强制执行,即每次保存用户对象时都必须选择新密码。但这可能不是你想要的。您可能希望仅在首次创建用户时,即当用户是新记录时,才强制执行此验证

你可以用

validates :password, presence: true, confirmation: true, if: :new_record?

更新了OP,请解释我如何告诉它在不进行验证的情况下进行操作-还有-如果字段为空-那么它们不会将空值保存到数据库中吗?我不想那样。。。另外,验证也应该一直进行…我现在很困惑。。你在质疑自己,要求展示你如何在没有验证的情况下做到这一点,然后说验证应该始终完成。。。要更新单个属性,您只需使用我在回答中提到的方法(更新属性而不是更新属性),这不会在您不打算更新的字段中插入空格,只会在您指定的字段中插入名称/值对。我刚刚编辑了有关该方法的更多信息。。希望你会发现它的帮助哦,对不起,我以为你在谈论更新属性-appoligies我明白了:)发生了,没问题。如果您接受答案,请勾选方框,或者直接问是否有任何需要澄清的问题
validates :password, presence: true, confirmation: true, if: :new_record?