我将如何使这项工作?我想根据不同模特的标准验证奖项提名。
class Award < ActiveRecord::Base
belongs_to :manager, :class_name => 'Manager', :foreign_key => 'manager_username'
def cant_be_manager
if nominee_username == Manager.username
errors.add(:nominee, "is a manager and cannot be nominated.")
end
end
end
答案 0 :(得分:2)
试试这个:
class Award < ActiveRecord::Base
belongs_to :manager, :class_name => 'Employee', :foreign_key => 'manager_username'
validate :cant_be_manager # <----- added this line
def cant_be_manager
if nominee_username == manager.username # <----- lower case m
errors.add(:nominee, "is a manager and cannot be nominated.")
end
end
end
但是(只是在这里猜测你的模型是什么样的)我想知道第二条修改后的行不应该是:
if nominee_username == manager_username
belongs_to行表示您的奖励表中有一个manager_username字段,但在Rails中更常见的是这是一个manager_id字段,belongs_to行看起来像这样:
belongs_to :manager, :class_name => 'Employee', :foreign_key => 'manager_id'
如果确实如此,您的代码应如下所示:
class Award < ActiveRecord::Base
belongs_to :manager, :class_name => 'Employee', :foreign_key => 'manager_id' # <----- changed
validate :cant_be_manager # <----- added this line
def cant_be_manager
if nominee_id == manager_id # <----- changed
errors.add(:nominee, "is a manager and cannot be nominated.")
end
end
end
这假设您试图阻止员工提名自己的经理,但员工可以提名其他经理或管理人员提名其他经理。如果您想要阻止任何人提名任何经理,请告诉我您如何知道员工是否是经理(可能是您的员工模型中的属性或方法),我将更新答案。
答案 1 :(得分:0)
也许是smth。像这样?
class Award < ActiveRecord::Base
validate :cant_be_manager
def cant_be_manager
.....
end
也可以看到这个问题:Rails custom validation