2011-04-12 36 views
0

我需要編寫一個自定義驗證器來檢查數據庫中是否存在記錄。有點像驗證唯一性的對立面,但是我找不到能夠在內置驗證器中實現我想要的內容的東西。如何在Rails 3.0中編寫數據庫特定的自定義驗證器?

我在試圖做的是檢查引用者是否存在或不在Users表中。如果引用者的用戶名是「testuser」,我想在Users表中檢查「testuser」是否確實存在。

我創建了一個自定義的驗證:

class ReferrerExistsValidator < ActiveModel::EachValidator 

但是我不確定如何着手來從沒有數據庫的詳細信息,任何指針?

+1

這是爲什麼數據庫的具體情況? (我認爲特定於數據庫特定於使用MySQL或PostgreSQL或Oracle) – 2011-04-12 04:40:38

回答

1

寫下面的驗證類

class ReferrerExistsValidator < ActiveModel::EachValidator 
    def validate_each(object, attribute, value) 
    unless User.find_by_username(value) 
     object.errors[attribute] << (options[:message] || "referrer does not exist") 
    end 
    end 
end 

添加以下內容相關的模型

validates :referrer_exists => true

+1

Doh ..那很簡單。查看唯一性驗證程序代碼後,我感到困惑。無論如何,只要你提供的代碼稍微正確,你是不是指find_by_username(value)而不是硬編碼?無論如何感謝很多:) – redshift5 2011-04-12 20:54:59

+0

感謝您指出它...固定! – 2011-04-13 07:40:52

0

我是新來的導軌/編碼,我可能誤解你,但想不出你只是這樣做:

@user.each do |user| 
    unless @user.username == current_user.referral_name 
    :alert "no user found" 
    else whatever 
    end 
end 

編輯:這不會在所有的工作 - 忽略了,讓我想想關於它的秒;)