0

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

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

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

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

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

  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 
4

2 回答 2

1

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

您似乎对表单进行了验证,

validates :password, presence: true, confirmation: true

每次都强制执行,即每次保存用户对象时都必须选择一个新密码。但这可能不是您想要的。您可能希望仅在第一次创建用户时强制执行此验证,即当它是新记录时。

你可以这样做,

validates :password, presence: true, confirmation: true, if: :new_record?
于 2013-09-08T01:04:44.460 回答
0
update_attribute

在不进行验证的情况下更新属性,你需要这个。

看看这个api 文档

编辑:

谈到阅读文档

这是方法文档的摘要

update_attribute(name, value) 公共

更新单个属性并保存记录。这对于现有记录上的布尔标志特别有用。另请注意

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.

编辑:

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

于 2013-09-07T23:09:11.997 回答