これを試して:
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
しかし(ここでモデルがどのように見えるかを推測するだけです)、その2番目の変更された行は次のようであってはならないのではないかと思います:
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
これは、従業員が自分のマネージャーを指名することを防止しようとしていると仮定していますが、従業員が他のマネージャーを指名したり、マネージャーが他のマネージャーを指名したりしても問題ありません。代わりに、マネージャーが誰からも指名されないようにしたい場合は、Employee がマネージャー (おそらく Employee モデルの属性またはメソッド) であるかどうかを知る方法を教えてください。回答を更新します。