基于角色的条件验证
Conditional validations based on role
我有三种用户类型:
enum role: { staff: 0, clinician: 1, admin: 2 }
每个员工用户都属于一所大学,并在注册时选择他们的大学。我想强制执行模型验证,要求 university_id 为员工用户提供。
为了实现这一点,我在 app/models/concerns/staff_user.rb
中加入了这一行
validates :university_id, presence: true, if: staff?
这是整个文件:
require 'active_support/concern'
module StaffUser
extend ActiveSupport::Concern
included do
belongs_to :university
has_many :patients
has_many :referral_requests
validates :university_id, presence: true, if: staff?
end
class_methods do
end
end
但是,当我这样做时,出现以下错误:
method_missing': 未定义的方法人员?'对于用户(调用 'User.connection' 建立连接):Class (NoMethodError)
除了 if: staff,我还需要进一步说明吗?如果是,怎么做?
谢谢!
不用担心,试试这个:
validates : university_id, presence: true, if: lambda { self.role == 'staff' }
编辑
实际上,来自@dukedave 的更好解决方案:
validates :university_id, presence: true, if: :staff?
我有三种用户类型:
enum role: { staff: 0, clinician: 1, admin: 2 }
每个员工用户都属于一所大学,并在注册时选择他们的大学。我想强制执行模型验证,要求 university_id 为员工用户提供。
为了实现这一点,我在 app/models/concerns/staff_user.rb
中加入了这一行validates :university_id, presence: true, if: staff?
这是整个文件:
require 'active_support/concern'
module StaffUser
extend ActiveSupport::Concern
included do
belongs_to :university
has_many :patients
has_many :referral_requests
validates :university_id, presence: true, if: staff?
end
class_methods do
end
end
但是,当我这样做时,出现以下错误:
method_missing': 未定义的方法人员?'对于用户(调用 'User.connection' 建立连接):Class (NoMethodError)
除了 if: staff,我还需要进一步说明吗?如果是,怎么做?
谢谢!
不用担心,试试这个:
validates : university_id, presence: true, if: lambda { self.role == 'staff' }
编辑
实际上,来自@dukedave 的更好解决方案:
validates :university_id, presence: true, if: :staff?