Rails 4 - 未调用自定义验证方法

时间:2015-11-22 01:32:12

标签: ruby-on-rails validation models

我有一个验证方法,可以验证用户是否属于团队。如果它不是团队的一部分,则应该添加错误,从而无法保存记录。

这是模型中的当前方法:

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

但是,当我保存新记录时,甚至不会调用此方法!我甚至试图添加一些日志,但没有任何反应,无论如何都要保存记录。

我在这里遗漏了什么吗?

2 个答案:

答案 0 :(得分:1)

使用createupdate作为: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

如果您希望验证同时适用于createupdate个操作,那么您根本不需要指定: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

然后你可以知道这是导致故障的原因。