2012-08-07 50 views
3

我有一個Assignment類屬於User類和Role類。它存儲三個值 - 對所屬用戶的引用,對其所屬角色的引用以及指示創建分配實例的用戶名稱的字符串值。Rails - 基於另一個模型驗證屬性

class Assignment < ActiveRecord::Base 
    include ActiveModel::Validations 

    belongs_to :user 
    belongs_to :role 

    attr_accessible :user, :role, :assigned_by_user 

    ... 

在我的模型驗證,我想進行檢查,以確保該assigned_by_user屬性不匹配的有效的用戶名。但是,我似乎無法訪問Assignment模型中的User.find(...)方法。

我將如何實現此功能?

+0

相信你能!你得到的錯誤是什麼? – phoet 2012-08-07 15:41:08

回答

7

添加一個「檢查用戶」模塊到您的lib文件夾(check_user.rb)。然後,在該文件中

module CheckUser 

def search_user 
    user = User.find_by_name(self.assigned_by_user) 
    unless item.nil? 
    errors.add(:name_found, "This username has already been taken") 
    end 
end 

然後在你的分配模式

class Assignment < ActiveRecord::Base 
    include CheckUser 
    validate :search_user 
+0

哦,真棒,這比我昨晚放在一起的哈克解決方案效果更好。 – Bryce 2012-08-09 07:28:55

+1

作爲一個額外的注意事項:也可以在模型中添加一個類似的方法,並在那裏調用它,而不是將它放在一個完全不同的文件中。 – 2013-10-10 20:50:01

相關問題