我有一个验证方法,可以验证用户是否属于团队。如果它不是团队的一部分,则应该添加错误,从而无法保存记录。
这是模型中的当前方法:
def assignee_must_be_part_of_team
unless assignee_id.blank?
team = Team.find(self.team_id)
errors.add(:team, 'Equipe não existe') unless team
user = team.users.find(self.assignee_id)
errors.add(:assignee_id, 'Responsável não faz parte da equipe') unless user
end
end
我正在我的模型中注册它:
validate :assignee_must_be_part_of_team, on: :save
但是,当我保存新记录时,甚至不会调用此方法!我甚至试图添加一些日志,但没有任何反应,无论如何都要保存记录。
我在这里遗漏了什么吗?
答案 0 :(得分:1)
使用create
或update
作为:on
选项的值。
改变这个:
validate :assignee_must_be_part_of_team, on: :save
要:
validate :assignee_must_be_part_of_team, on: :create
或:
validate :assignee_must_be_part_of_team, on: :update
如果您希望验证同时适用于create
和update
个操作,那么您根本不需要指定:on
选项,因为&#39 ; s默认行为。所以,这应该工作:
validate :assignee_must_be_part_of_team
有关详细信息,请参阅the documentation here。
答案 1 :(得分:0)
您在一次验证中添加了两个错误。也许您可以将其拆分为单独的验证以便于调试:
validates :team_id, presence: :true
validate :belong_to_team, :assignee_part_of_team
private
def belong_to_team
errors[:team] << 'Equipe não existe' unless self.team
end
def assignee_part_of_team
errors[:assignee] << 'Responsável não faz parte da equipe' unless self.team and self.team.users.include?(self.assignee)
end
然后你可以知道这是导致故障的原因。