【问题标题】:Conditional validations based on role基于角色的条件验证
【发布时间】:2018-03-09 12:50:10
【问题描述】:

我有三种用户类型:

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':未定义的方法人员?' for User(调用'User.connection'建立连接):Class (NoMethodError)

我是否需要进一步说明是否:员工?如果有,怎么做?

谢谢!

【问题讨论】:

  • :staff?staff?,你的问题不清楚,但如果是后者,那就是你的问题。
  • 目前写作“员工?”。 :职员?引用枚举,所以应该解决它 - 谢谢!

标签: ruby-on-rails enums roles


【解决方案1】:

不要使用关注点,试试这个:

validates : university_id, presence: true, if: lambda { self.role == 'staff' }

编辑

实际上,@dukedave 提供了更好的解决方案:

validates :university_id, presence: true, if: :staff?

【讨论】:

  • 感谢 Cyzanfar - 这样做与使用关注点相比有什么优势?
  • 老实说,我认为像这样的简单验证不是很好的候选,因为有额外的层。我会为了清楚起见而将其简单地放入您的模型中。
猜你喜欢
  • 1970-01-01
  • 2016-01-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 2019-10-10
  • 2020-09-23
  • 2017-08-03
  • 1970-01-01
相关资源
最近更新 更多