2016-04-29 70 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