我有一个在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过程会是什么样的?
答案 0 :(得分:1)
要从对象外部调用私有方法,请使用send
:
User.find_by_email('xyz').send(:set_referer_url)
这当然是不好的做法,因为私人方法是私有的。但是,对于作为迁移一部分的现有数据的一次性回填,我认为没关系。