验证引用同一个表的同一个表中的两个外键

时间:2016-09-29 14:21:57

标签: mysql ruby-on-rails ruby validation ruby-on-rails-5

我的桌卡中有两个字段user_idassignee_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

有人知道如何正确地做到这一点吗? 提前谢谢。

1 个答案:

答案 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