在重构中,我需要将一个generate_token方法从我的用户模型中移出,以便其他模型能够调用它。
这是方法代码:
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_token和pw_reset_token。
我的第一个想法是把它放到/lib/generate_token.rb中,然后用include generate_token从模型中调用它。我不应该在include上传递列param,因为它只是包含方法,而不是调用它。
对我来说,挑战是end while User.exists?(column => self[column])。这将防止方法在已经存在的情况下生成新令牌。但是,这是假设用户模型;相反,我需要重构它以接受调用方法的模型,并将其作为变量传递给方法,如下所示:
include generate_token(model_name)
这样代码现在就可以读取
end while [Model].exists?(column => self[column])
这个是可能的吗?我该怎么做?
发布于 2016-04-29 19:14:01
当然,库类是这里的方法,更确切地说,是Rails 关注点 (在这个上下文中也有相同的差异)。
也就是说,您可以调用self.class来获取类,然后执行类似于self.class.exists?的操作。
https://stackoverflow.com/questions/36945721
复制相似问题