2011-06-30 176 views
11

我有一個用戶註冊表單,它具有通常的字段(名稱,電子郵件,密碼等),還有一個「team_invite_code」字段和一個「角色」彈出式菜單。Rails自定義驗證

創建用戶之前 - 只有在情況下,用戶的角色是「孩子」 - 我需要:

  • 檢查,如果team_invite_code存在
  • 檢查,如果有一隊隊中的表已經平等邀請碼
  • 準用戶在合適的團隊

我怎麼能寫在的Rails 2.3.6一個適當的驗證?

我嘗試以下,但它給我的錯誤:

validate :child_and_team_code_exists 

def child_and_team_code_exists 
    errors.add(:team_code, t("user_form.team_code_not_present")) unless 
    self.is_child? && Team.scoped_by_code("params[:team_code]").exists? 
end 

>> NameError: undefined local variable or method `child_and_team_code_exists' for #<Class:0x102ca7fa8> 

UPDATE: 此驗證代碼的工作:

def validate 
    errors.add_to_base(t("user_form.team_code_not_present")) if (self.is_child? && !Team.scoped_by_code("params[:team_code]").exists?) 
end 

回答

37

你的validate方法child_and_team_code_exists應該是一個私有或受保護方法,否則在你的情況下,它成爲一個實例方法

validate :child_and_team_code_exists 


private 
def child_and_team_code_exists 
    errors.add(:team_code, t("user_form.team_code_not_present")) unless 
    self.is_child? && Team.scoped_by_code("params[:team_code]").exists? 
end 
+0

非常感謝Felix,我在方法定義之前添加了「private」,但仍然出現同樣的錯誤:( – Augusto

+0

噢...您能否在您的模型中發佈更多代碼?是的,就像你在問題中提到的那樣,你也不應該使用params,它應該對你有用,如果它是自我的一個屬性的話。 – felix

+0

嗨菲利克斯我更新了這個問題,現在驗證代碼的作品。我仍然不確定如何處理參數,因爲team_code不是(也不應該是)用戶屬性(在第一個之後可以有很多團隊)。 – Augusto