我有一个名为User的模型,它具有first_name,last_name和password属性。它正在使用Devise。现在我想要另一个名为Receptionist的模型,它共享同一个User表。用户可以添加接待员。
这是我的代码
class Receptionist < ApplicationRecord
attr_accessor :password
attr_accessor :password_confirmation
self.table_name = "users"
belongs_to :user, :class_name => 'User', :foreign_key => 'user_id' #source: :doctor
end
class User < ApplicationRecord
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
has_many :receptionists, :class_name => 'Receptionist', :foreign_key => 'user_id'
accepts_nested_attributes_for :receptionists, allow_destroy: true
end
在更新方法中 - 我有这个
user = User.new(get_params)
user.save
def get_params
params.require(:user).permit(:first_name, :last_name,
receptionists_attributes: [:first_name, :last_name, :email, :password, :password_confirmation, :_destroy]
)
end
这是api电话
{
"auth_token": "TMERW-fhNroA9La9iUSX",
"user": {
"receptionists_attributes": {
"0": {
"first_name": "reception 1",
"last_name": "g",
"email": "xx@gmail.com",
"password": "xxxxx",
"password_confirmation": "xxxx"
}
}
}
}
现在除了密码外,还是保存了记录员的记录。密码存储为nil。任何人都可以告诉我哪里出错了
答案 0 :(得分:1)
将devise :database_authenticatable, :registerable, :recoverable, :rememberable, :trackable, :validatable
添加到Receptionist
模型。
您需要删除
attr_accessor :password
attr_accessor :password_confirmation
因为它会覆盖设计encrypted_password
的设计方法。由attr
生成的attr_accessor
将不会保存到数据库,因此当它超出生命周期时,它将变为nil
。
并且devise
不会直接将原始密码保存到数据库,它会加密password
并将其保存在encrypted_password
列中,因此您无法提取{{1} }},您只能验证password
是否有效,例如
password