試試這個:
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中更常見的這是一個經理標識領域,隨着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
這是假設你正試圖阻止提名自己的經理僱員,但它的好爲員工提名其他管理人員,或爲管理人員提名其他管理人員。相反,如果您想阻止任何人提名任何管理人員,請讓我知道您是否知道員工是經理(可能是您的員工模型中的屬性或方法),我會更新答案。
我認爲你想使用小寫'manager.username' –
我很抱歉。我會嘗試將原始帖子恢復原樣,接受你的回答,然後分別詢問「新」問題。我試圖只提供有關的信息,並沒有完全解釋自己。我很抱歉。 –
沒問題。但是,我不確定我是否完全回答了您的原始問題,我仍然願意。如果你想出了我給你的東西,那很好,但如果你需要更多的幫助,只需回答我在下面提出的問題,我會更新一個更完整的答案。 –