我有一个用户对象,他可以更新他的个人资料,其中包括姓名,用户名,密码(空白),密码确认(空白),电子邮件,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
答案 0 :(得分:1)
真正的问题似乎是您的用户模型验证中存在逻辑错误。
您似乎对表单进行了验证,
validates :password, presence: true, confirmation: true
每次都强制执行,即每次保存用户对象时都必须选择新密码。但这可能不是你想要的。您可能希望仅在首次创建用户时强制执行此验证,即当它是新记录时。
您可以使用
执行此操作validates :password, presence: true, confirmation: true, if: :new_record?
答案 1 :(得分:0)
update_attribute
在不进行验证的情况下更新属性,您需要这个。
查看此api doc
编辑:
谈到阅读文档
的摘要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所述的回调。