【问题标题】:Devise Invitable : Optionally Send Email设计邀请:可选择发送电子邮件
【发布时间】:2011-01-05 00:25:15
【问题描述】:

在设计邀请中,您可以通过执行以下操作来邀请新用户:

User.invite!(:email => "new_user@example.com", :name => "John Doe")

我想做的是(有时)阻止设计邀请发送电子邮件。我在库中找到了以下代码:

def invite!
        if new_record? || invited?
          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
          save(:validate => false)
          ::Devise.mailer.invitation_instructions(self).deliver
        end
      end

关于如何最好地更新它以不在最后一行发送电子邮件的任何想法?我不熟悉 ::

谢谢

【问题讨论】:

  • 你可以注释掉最后一行:# ::Devise.mailer.invitation_instructions(self).deliver
  • @The,我希望在某些情况下发送电子邮件,但不是在所有情况下发送。只是想知道是否有我可以传递的参数。
  • 我能够通过将其添加到我的用户模型来覆盖自定义方法。问题是现在我收到错误“NoMethodError (undefined method invitation_instructions' for Devise::Mailer:Class): app/models/user.rb:139:in invite!'”有什么想法可以将它添加到我的用户模型中而不出现错误吗?

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


【解决方案1】:

你可以使用:

User.invite!(:email => "new_user@example.com", :name => "John Doe") do |u|
  u.skip_invitation = true
end

User.invite!(:email => "new_user@example.com", :name => "John Doe", :skip_invitation => true)

这将跳过邀请电子邮件。

【讨论】:

  • 我遇到了类似的问题,我发现 'skip_invitation' 不适用于实例,仅适用于类...所以@user.invite!() 不尊重 :skip_invitation 参数跨度>
  • 您可以直接在实例上使用skip_invitation 属性,方法是将其设置为@user.skip_invitation = true 然后调用@user.invite!
【解决方案2】:

在您的invitations_controller(应该已经有一个继承自Devise::InvitationsController),您可以添加以下内容

  # this is called when creating invitation
  # should return an instance of resource class
  def invite_resource
    if new_record? || invited?
      self.skip_confirmation! if self.new_record? && self.respond_to?(:skip_confirmation!)
      super
    end
  end

这会覆盖Devise的邀请方法,只有满足条件才调用原来的Devise方法(super)。然后,设计应该处理令牌生成并发送邀请。如果条件为假,您可能还想设置应用程序执行的操作,在我的情况下,如下所示:

  def invite_resource
    if user_params[:is_free] == "true"
      super
    else
      # skip sending emails on invite
      super { |user| user.skip_invitation = true }
    end
  end

params[:is_free] 设置为''true'' 时发送邀请,否则创建资源,但不发送邀请。

经过一番挖掘,我在这里找到了这个解决方案:https://github-wiki-see.page/m/thuy-econsys/rails_app/wiki/customize-DeviseInvitable

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多