2013-05-20 29 views
0

我將如何完成這項工作?我想根據來自不同模型的標準驗證提名獎。Rails 3.2根據不同的型號進行驗證

 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

我認爲你想使用小寫'manager.username' –

+0

我很抱歉。我會嘗試將原始帖子恢復原樣,接受你的回答,然後分別詢問「新」問題。我試圖只提供有關的信息,並沒有完全解釋自己。我很抱歉。 –

+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中更常見的這是一個經理標識領域,隨着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 

這是假設你正試圖阻止提名自己的經理僱員,但它的好爲員工提名其他管理人員,或爲管理人員提名其他管理人員。相反,如果您想阻止任何人提名任何管理人員,請讓我知道您是否知道員工是經理(可能是您的員工模型中的屬性或方法),我會更新答案。

+0

我確實已經有'validate:cant_be_manager' ---我得到了這個:'未定義的方法用戶名爲nil:NilClass' –

+0

@KatieM,你能告訴我你的Award模型和Employee模型中的字段嗎?具體而言,它是manager_username還是manager_id,對於Employee模型,您如何知道員工是否是經理? –

+0

我的壞 - 爲了簡潔起見,我沒有提供所有信息。我更新了我原來的帖子。 –

0

也許不便。喜歡這個?

class Award < ActiveRecord::Base 
    validate :cant_be_manager 

    def cant_be_manager 
    ..... 
end 

看到這個問題太:Rails custom validation