2016-04-29 34 views
0

在重構中,我需要將generate_token方法移出我的用戶模型,以便可以由其他模型調用。將模型傳遞給rails中的方法

這是該方法的代碼:

def generate_token(column) 
    begin 
    self[column] = SecureRandom.urlsafe_base64 
    end while User.exists?(column => self[column]) 
end 

當柱在允許根據需要在用戶模型來生成許多不同的令牌傳遞。該方法被稱爲像:

def some_other_method 
    generate_token(:token_column_name) 
    ... 
end 

我的用戶模型目前通過兩種不同的令牌列的方法:auth_tokenpw_reset_token

我的第一個想法是把它放在/lib/generate_token.rb,並從include generate_token模型中調用它。我不應該傳入包含的列參數,因爲它只是包含方法,而不是調用它。

我面臨的挑戰是end while User.exists?(column => self[column])。這可以防止該方法在已經存在的情況下生成新的令牌。但是,這是假設用戶模型;相反,我需要重構其採取與調用該方法,並通過在作爲一個變量的方法,如模型:

include generate_token(model_name)

使代碼現在可以讀取

end while [Model].exists?(column => self[column])

這可能嗎?我將如何做到這一點?

回答

0

當然,一個庫類是去這裏的方式,或者更具體地說,Rails Concern(在這種情況下相同的差異)。

這就是說,你可以打電話self.class來獲取類,然後做這樣的事情self.class.exists?

+0

我馬上去關注...謝謝。 – Matteo

+0

這似乎是我在找的東西。我會盡快發佈我的代碼。 (或者,我將再次發佈Stack ...:p) – Matteo

+0

太好了,很高興我能幫上忙。 – GoGoCarl

相關問題