2011-12-02 8 views
0

私はHerokuで実行中のアプリケーションを持っています。このアプリはメール、パスワード、その他のいくつかの列を持つUserモデルを持っています。私は最近、各ユーザーの一意のトークンであるランダムトークン列を含め、データベースにローカルに列を追加しました。ユーザーが作成されると、次のコードは、ユーザーモデルで実行されます。レコードがすでに存在する場合にデータベース列に情報を追加する

before_create :set_referer_url 

... 

private 

def set_referer_url 
    begin 
    self.referer_url = rand(36**8).to_s(36) 
    end while User.exists?(:referer_url => self.referer_url) 
end 

を作成されたすべての新しいユーザーのために、彼らは、このユニークなトークンを持つことになります。ただし、古いユーザーは使用しません。私はこの移行を(新しいデータベース列で)herokuにプッシュしたかったのです。この新しい列が追加される前に作成されたユーザーにこのトークンを追加するにはどうすればよいですか。私はレーキについて多くのことを聞いたことがありますが、どんな助けでも大歓迎です。余談として

、私は次のようにして、レールのコンソールからローカルでテストユーザーのトークンを追加しようとしました:プライベートメソッド:

User.find_by_email('xyz').set_referer_url 

これは、しかし、NoMethodエラーが生じました。どのように私はレーキでプライベートメソッドを呼び出すことができますか?ポピュレートされた新しいトークン列を使用して古いユーザーを設定するために、レイプロセス全体がどのように表示されますか?

答えて

1

sendを使用し、オブジェクトの外部からプライベートメソッドを呼び出す:

User.find_by_email('xyz').send(:set_referer_url) 

それはプライベートメソッドが理由でプライベートでと、当然のこととしてこれを行うには、一般的に悪い習慣です。しかし、マイグレーションの一環として既存のデータの一回限りのバックフィルを行うためには問題ないと思います。

+0

ありがとう!しかし、私はどのように全体のユーザーモデルのレーキタスクでこれを管理するのだろうか? – Alex

+0

変更前に作成したすべてのユーザーをループしてその上でメソッドを呼び出すことができますが、非常に悪い考えであるユーザーが多い場合は、あなたはバッチでそれをやりたいかもしれません。 – Russell

関連する問題