我有一个 AWARD 模型 - 创建 AWARD 有两种形式。一种用于提名员工,另一种用于非员工。EMPLOYEE 表单拉出一个活跃员工列表以填充 Nominee 选择框。Non-Employee 表单只有文本字段来填充 Nominee 字段(因为我没有填充选择列表的来源)。
为了对应用程序进行虚拟验证,我想运行一个不允许员工提名自己的验证(因为他们将不可避免地尝试这样做!)。每个表单上都有一个隐藏字段来设置表单是Employee还是Non:<%= f.hidden_field :employee, :value => true/false %>
因此,在 Non-Employee 表单上,如果用户键入他自己的 nominee_username,它应该会抛出一个错误,指出他无法提名自己。
我有一个验证,但即使 nominee_username 与提名人不匹配,也会引发错误。所以,我的验证有问题。
这是我尝试过的:
class Award < ActiveRecord::Base
belongs_to :nominator, :class_name => 'Employee', :foreign_key => 'nominator_id'
belongs_to :nominee, :class_name => 'Employee', :foreign_key => 'nominee_id'
validate :cant_nominate_self_non_employee_form,
:on => :create, :unless => :employee_nomination?
def employee_nomination?
self.employee == true
end
##### the validation below is not working properly - it throws error every time ####
##### only if Employee.username is equal to award.nominee_username, it should error ####
def cant_nominate_self_non_employee_form
if Employee.where(:username => nominee_username)
errors.add(:nominator, "can't nominate yourself")
end
end
end
Award 和 Employee 模型之间存在关联:
class Employee < ActiveRecord::Base
has_many :awards, :foreign_key => 'nominator_id'
has_many :awards, :foreign_key => 'nominee_id'
end