2016-04-29 13 views
0

リファクタリングでは、generate_tokenメソッドを他のモデルから呼び出せるようにユーザモデルから移動する必要があります。列は、必要に応じて、ユーザモデルは、多くの異なるトークンを生成することを可能に渡されるモデルをメソッドでレールに渡す

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

これは、メソッドコードです。 auth_tokenpw_reset_token

def some_other_method 
    generate_token(:token_column_name) 
    ... 
end 

私のユーザモデルが現在の方法には、2つの異なるトークン列に渡しますようにメソッドが呼び出されます。

私の最初の考えは、/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(ここでは同じdiff)を使用します。あなたは、私は心配に見ていきますself.class.exists?

+0

のようなものを行う、クラスを取得するためにself.classを呼び出すことができる、と述べた

...ありがとう。 – Matteo

+0

これは私が探していたようです。私はそれが動作するようにすぐに私のコードを投稿します。 (または、私は再びスタックに投稿します...:p) – Matteo

+0

すごくうれしいです。 – GoGoCarl

関連する問題