如何在rails admin controller中调用actionmailer?

时间:2017-11-15 06:16:30

标签: ruby-on-rails rails-admin

我希望在通过rails admin创建内容后向用户发送电子邮件。

我知道我可以在模型回调中调用它,但它不被视为好pratices

最好的方法是将动作管理器操作放在控制器中的模型保存之后,但我不知道如何在rails_admin控制器中执行此操作

class UsersController < ApplicationController
  # POST /users
  # POST /users.json
  def create
    @user = User.new(params[:user])

    respond_to do |format|
      if @user.save
        # Tell the UserMailer to send a welcome email after save
        UserMailer.welcome_email(@user).deliver_later

        format.html { redirect_to(@user, notice: 'User was successfully created.') }
        format.json { render json: @user, status: :created, location: @user }
      else
        format.html { render action: 'new' }
        format.json { render json: @user.errors, status: :unprocessable_entity }
      end
    end
  end
end

2 个答案:

答案 0 :(得分:0)

您是否尝试将您的邮件程序包含在admin_controller中?

include UserMailer

然后在您的创建操作UserMailer.some_mailer_action.deliver_now

答案 1 :(得分:0)

你想要做的事情在rails admin上并不容易,因为你不能修改控制器,也没有猴子修补它们就可以访问它们。

我实际上为这个功能做了一个rails管道管理员检查提交的更改: https://github.com/aliada-mx/rails_admin/commit/6251554efd1d83cdb418f42683ee55a4e27c2474 刚触及两个文件

示例用法

class User
   after_save :on_admin_updates
   attr_accessor :edited_in_rails_admin

   def on_admin_updates
      return unless edited_in_rails_admin
      self.edited_in_rails_admin = false

     UserMailer.welcome_email(self.id)
  end
end

我知道有点笨重,PR欢迎。