【发布时间】:2015-09-13 03:48:11
【问题描述】:
我有一个用户数据库作为 User(id: integer, username: string, created_at: datetime, updated_at: datetime, password_digest: string, admin: boolean, usermanager: boolean)。 我想更新一个用户并使他成为管理员,将 admin 变量设置为 true。
我在控制器中的更新:
def update
@user = User.find(params[:id])
if @user.update_attributes(user_params)
flash[:success] = "User edited"
redirect_to current_user
else
render users_url
end
end
update_attributes 在所有情况下都失败。我打开了一个调试器并尝试调用 update_attributes,它在那里也失败了。
(byebug) user_params = {"admin"=>true}
{"admin"=>true}
(byebug) @user
#<User id: 1, username: "dsmegha", created_at: "2015-09-11 07:42:01", updated_at: "2015-09-13 03:25:01", password_digest: "$2a$10$BInH6J1dXHanqNIdGag6megSyrmm95AmjTEGPemNdGU...", admin: false, usermanager: nil>
(byebug) @user.update_attributes(user_params)
(0.2ms) begin transaction
User Exists (0.2ms) SELECT 1 AS one FROM "users" WHERE ("users"."username" = 'dsmegha' AND "users"."id" != 1) LIMIT 1
(0.2ms) rollback transaction
false
update_attribute 同样适用。
(byebug) @user.update_attribute(:admin,true)
(0.2ms) begin transaction
(0.1ms) commit transaction
true
(byebug) @user
#<User id: 1, username: "dsmegha", created_at: "2015-09-11 07:42:01", updated_at: "2015-09-13 03:25:01", password_digest: "$2a$10$BInH6J1dXHanqNIdGag6megSyrmm95AmjTEGPemNdGU...", admin: true, usermanager: nil>
(byebug)
知道我在这里缺少什么吗?
【问题讨论】:
-
user_params中允许使用哪些参数? -
private def user_params params.require(:user).permit(:username, :password, :password_confirmation, :admin) end.
-
有验证吗?
-
has_many :timezones,dependent: :destroy VALID_USERNAME_REGEX = /\A[a-zA-Z0-9]+\z/ 验证 :username, presence: true, length: { minimum:6, maximum :15 },格式:{ with:VALID_USERNAME_REGEX },唯一性:true 验证:password,存在:true,长度:{ minimum:6,maximum:15 } has_secure_password 不适用于 :admin 字段
-
如果您只更新
admin字段,请尝试@user.update_column(:admin, true)。检查它是否有效。
标签: mysql ruby-on-rails