0

どうすればこれを機能させることができますか?別のモデルの基準に基づいて賞のノミネートを検証したいと考えています。

      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
4

2 に答える 2

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

しかし(ここでモデルがどのように見えるかを推測するだけです)、その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 モデルの属性またはメソッド) であるかどうかを知る方法を教えてください。回答を更新します。

于 2013-05-20T20:19:42.360 に答える