2011-12-02 47 views
0

我有一個在Heroku中運行的應用程序。該應用程序的用戶模型包含電子郵件,密碼和其他一些列。我最近在本地添加了更多列到數據庫,包括隨機標記列,這是每個用戶的唯一標記。當創建一個用戶,下面的代碼運行在用戶模式:在記錄已存在之後向數據庫列添加信息

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錯誤:私有方法。我怎樣才能在耙子中調用私有方法?整個rake過程看起來像爲了設置使用填充的新標記列的舊用戶?

回答

1

要呼叫的對象之外的私有方法,使用send

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

這是一般不好的做法,這樣做是理所當然的,因爲私有方法是私人的一個原因。但是,對於現有數據的一次性回填作爲遷移的一部分,我認爲是可以的。

+0

謝謝!我如何在整個用戶模型的rake任務中管理它? – Alex

+0

那麼你可以循環遍歷你創建之前創建的每個用戶,並調用它的方法 - 但是如果你有很多用戶可能是一個非常糟糕的主意。你可能想分批做。 – Russell

相關問題