我覆盖了设计的确认!向我的用户发送欢迎消息的方法:
class User < ActiveRecord::Base
devise :invitable, :database_authenticatable, :registerable, :recoverable,
:rememberable, :confirmable, :validatable, :encryptable
# ...
# Devise confirm! method overriden
def confirm!
UserMailer.welcome_alert(self).deliver
super
end
end
当用户接受邀请并设置密码时使用devise_invitable确认!方法永远不会触发,可以强制吗?devise_invitable 如何确认用户?
或者也许我可以以同样的方式覆盖accept_invite(或任何它所调用的)方法?
我希望受邀用户保持未确认状态,然后在接受邀请后确认。
谢谢,非常感谢任何帮助!
更新
通过devise_invitable 模型,我发现了可能导致这种不当行为的两种方法:
# Accept an invitation by clearing invitation token and confirming it if model
# is confirmable
def accept_invitation!
if self.invited? && self.valid?
self.invitation_token = nil
self.save
end
end
# Reset invitation token and send invitation again
def invite!
if new_record? || invited?
@skip_password = true
self.skip_confirmation! if self.new_record? && self.respond_to?(:skip_confirmation!)
generate_invitation_token if self.invitation_token.nil?
self.invitation_sent_at = Time.now.utc
if save(:validate => self.class.validate_on_invite)
self.invited_by.decrement_invitation_limit! if self.invited_by
!!deliver_invitation unless @skip_invitation
end
end
end