我的桌卡中有两个字段user_id
和assignee_id
。他们都在我的表用户中引用用户。需要存在第一个,但不是第二个。
在我的验证中,我想检查第一个的完整性和存在,并且只检查第二个的完整性。
我已经尝试过,但它不起作用:
belongs_to :user
belongs_to :assignee, :class_name => 'User', :foreign_key => :assignee_id
validates_presence_of [:title, :user_id]
validates :user, presence: true
validates :assignee_id
有人知道如何正确地做到这一点吗? 提前谢谢。
答案 0 :(得分:1)
在这种情况下,您通常会使用ActiveRecord::Validations#validate
创建自定义验证。
validates :user_id, presence: true
validate :integrity_of_assignee_id, if: ->(obj) { obj.assignee_id.present? }
private
def integrity_of_assignee_id
# Add error to the field if the `assignee_id` is invalid
errors.add(:assignee_id, 'Not valid assignee_id') unless User.find_by(id: assignee_id)
end