在记录已存在之后向数据库列添加信息

时间:2011-12-02 23:19:26

标签: ruby-on-rails ruby-on-rails-3 rake

我有一个在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。如何为添加此新列之前创建的用户添加此令牌。我听说过很多关于耙子的事情,但是非常感谢任何帮助。

顺便说一句,我尝试通过执行以下操作从rails控制台本地为测试用户添加令牌:

User.find_by_email('xyz').set_referer_url

然而,这导致了NoMethod错误:私有方法。如何在rake中调用私有方法?为了使用填充的新令牌列设置旧用户,整个rake过程会是什么样的?

1 个答案:

答案 0 :(得分:1)

要从对象外部调用私有方法,请使用send

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

这当然是不好的做法,因为私人方法是私有的。但是,对于作为迁移一部分的现有数据的一次性回填,我认为没关系。