2011-06-10 83 views
0

我有一個用戶模型,看起來像:Rails - 如何有條件啓用驗證?

class User < TwitterAuth::GenericUser 

acts_as_authentic {|c| 
    c.login_field = :email 
    c.validate_email_field = false 
    c.validate_password_field = false 
    } 
end 

它採用TwitterAuth和Authlogic插件。

我想根據用戶是否使用twitter通過普通電子郵件註冊來選擇性地禁用驗證c.validate_email_field = false 。

- With email and password registration, the validations needs to be on. 
-twitter does not have email or password fields, the validation needs to be off. 

When I disable validation, the authLogic user registration using email and password fails: 

unknown attribute: password_confirmation 


I tried to selectively disable validation if attribute 'twitter_id' is present. 

c.merge_validates_confirmation_of_password_field_options({:unless => :skip_password_validation?}) 

def skip_password_validation 
    !attribute_present?('twitter_id') 
end 

這不起作用,因爲表格中存在的屬性'twitter_id'無論是否使用。

如何有選擇地啓用電子郵件和密碼驗證? i,e僅在未使用twitter oAuth時啓用驗證。

感謝您的幫助

回答

1

我想你也許需要看看其他驗證方法,如validates_with那的意思爲更復雜的驗證邏輯。然後,您應該能夠驗證你根據什麼被通過在需要的屬性

+0

看起來像validates_with只是Rails 3.0。不幸的是我在2.3.5上,這似乎不是一種選擇。 – truthSeekr 2011-06-10 19:07:47

+1

是的,你是對的。在2.3.x中,我想你必須直接覆蓋'validate'方法。看看'ActiveRecord :: Validations'的例子。祝你好運! – harald 2011-06-11 15:09:56