如果用户是admin,则使rails忽略输入

时间:2013-09-07 22:52:12

标签: ruby-on-rails updates roles

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

我的模型声明必须填写所有(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 

2 个答案:

答案 0 :(得分:1)

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

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

validates :password, presence: true, confirmation: true
每次都强制执行

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

您可以使用

执行此操作
validates :password, presence: true, confirmation: true, if: :new_record?

答案 1 :(得分:0)

update_attribute

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

查看此api doc

编辑:

谈到阅读文档

以下是method documentation

的摘要
  

update_attribute(name,value)public

     

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

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.

修改

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