在创建活动管理员记录时,我尝试保存一个不是来自params的属性(role_type)。
但是,该属性不会在创建中保存。 我把它添加到permit_params。
permit_params :email, :password, :password_confirmation, :phone_no, :name, :role_type, role_ids: []
controller do
def create
user = User.create(name: params[:user][:name], email: params[:user][:email], password: SecureRandom.hex, role_type: "employee")
flash[:notice] = "User Created"
redirect_to admin_user_path(user)
end
end
答案 0 :(得分:1)
如果你想将params散列与你手动分配的一些属性结合起来,最干净的方法是使用一个块
permit_params :email, :password, :password_confirmation, :phone_no, :name, :role_type, role_ids: []
controller do
def create
user = User.create(permitted_params[:user]) do |u|
u.password = SecureRandom.hex
end
flash[:notice] = "User Created"
redirect_to admin_user_path(user)
end
end
然而,您的密码加密方案非常幼稚 - 我建议您使用ActiveModel::SecurePassword
而不是尝试重新创建密码加密轮并创建不安全的身份验证系统。
另一个主要问题是您实际上并未检查用户是否已创建!
permit_params :email, :password, :password_confirmation, :phone_no, :name, :role_type, role_ids: []
controller do
def create
user = User.new(permitted_params[:user]) do |u|
u.password = SecureRandom.hex
end
if user.save
flash[:notice] = "User Created"
redirect_to admin_user_path(user)
else
render :new
end
end
end