Ruby on rails 使用Desive完成电子邮件确认后,如何将此交易添加到?
假设现有用户(ID:1367)可以将此url作为邀请发送给他的朋友Ruby on rails 使用Desive完成电子邮件确认后,如何将此交易添加到?,ruby-on-rails,ruby-on-rails-3,devise,Ruby On Rails,Ruby On Rails 3,Devise,假设现有用户(ID:1367)可以将此url作为邀请发送给他的朋友 http://example.com/users/sign_up?invitation=1367 然后用户表中有一个名为“邀请”的隐藏列 这就是我想要的程序 他的朋友输入信息注册 他点击提交按钮,然后隐藏字段“邀请”也将发送到表单 1367将在记录的“邀请”列中设置 他将收到确认邮件,当他单击链接时,我想添加此交易,并且只为他的帐户执行一次。 当然,当现有用户试图重新激活时,不应执行此操作。 仅适用于新用户的第一次确认 代码
http://example.com/users/sign_up?invitation=1367
然后用户表中有一个名为“邀请”的隐藏列
这就是我想要的程序
1367
将在记录的“邀请”列中设置当然,当现有用户试图重新激活时,不应执行此操作。
仅适用于新用户的第一次确认
@user = User.find_by_invitation(current_user.invitation)
@user.friends = @user.friends + 1
@user.save
我已经有了注册控制器,可以帮助添加额外的事务来设计。现在我想知道如何在我的应用程序中实现此过程 应该是这样的吗 注册\u controller.rb
def after_????????
if @user = User.find_by_invitation(current_user.invitation)
@user.friends = @user.friends + 1
@user.save
end
end
您可以在用户模型上执行此操作。在创建用户后触发一个名为
的回调
# user.rb
after_create :handle_invitation_code
private
def handle_invitation_code
# do something with invitation here
# i'm assuming that you want to credit
# whoever it is that invited this user
# assuming that invitation contains the
# id of the referrer
if referrer = User.find_by_id(invitation)
# do something with referrer
end
end
请注意,如果在回调时返回false,将导致回滚,记录将不会保存
更新:确认后的回调
不要在创建后使用,而要在保存前使用,并带有if
选项
before_save :handle_invitation_code, if: :just_confirmed?
def just_confirmed?
confirmed_at_changed? && confirmed_at_was.nil?
end
def handle_invitation_code
...
end
谢谢但关键是在确认完成后激活交易。Deviate会在注册完成后立即创建用户记录,即使尚未确认。我不想因此而给你任何荣誉。我只会在电子邮件确认完成后才给出答案。对不起,我通常会对问题的描述感到迷茫,而忘记阅读标题。更新了我的答案谢谢更新!即使用户从编辑页面保存,它也能工作吗?它不会。只有当确认的_at属性从nil更改为非nil值时,它才会工作。谢谢。最后一个问题。我确实把它放到了user.rb中,但是每次当所有用户都访问users\u controller时,它似乎都会检查并执行刚刚确认的方法。不会让我的应用程序变慢吗?