33

私はレールにかなり慣れていないので、物事を理解しようとしています。最近、メーラーをすべてセットアップしましたが、正常に機能していました。しかし、ユーザー アクション用に 2 番目のメーラーを追加しようとしていますが、機能していないようです。

私が達成しようとしているのは、ユーザーがサインアップし、管理者に電子メールを送信し、管理者がユーザーを有効にする必要があることです。現在、管理者がユーザーを有効にするとメールが送信されますが、何らかの理由で新しく作成したユーザーのメールが送信されません。これは、私の作成メソッドが起動しないためだと思いますが、どこに配置すればよいですか? ユーザーメソッドを上書きする必要がありますか?

私の UserMailer コントローラー:

class UserMailer < ActionMailer::Base
  default from: "website@rnd.designcom.com.au"
  def send_enabled_message(user)
    @user = user
    mail(:to => user.email, :subject => "Welcome to Pixel Technologies!!!")
  end
  def send_new_user_message(user)
    @user = user
    mail(:to => 'ben.suryn@rnd.designcom.com.au', :subject => "New User created please review and enable.")
  end
end

私のusers_controller:

class UsersController < ApplicationController
  before_filter :authenticate_user!
  load_and_authorize_resource

# POST /users
def create
  @user = User.new(user_params)
  puts "******************** NEW USER ****************************"
  puts user_params
  if @user.save
    puts 'Sending email for create user'
    UserMailer.send_new_user_message(@user).deliver
    redirect_to @user, notice: 'User was successfully created.'
  else
    render action: 'new'
  end
end

しかし、この create メソッドは起動されません。私は何を間違っていますか。UserMailer.send_new_user_message(@user).deliver を配置する必要がある別の方法はありますか?

4

2 に答える 2

69

確認メールはコントローラから送信する必要があります。Devise::RegistrationsControllerデフォルトを上書きするのは簡単です。

ファイルを作成しますapp/controllers/my_registrations_controller.rb(これに好きな名前を付けます)

class MyRegistrationsController < Devise::RegistrationsController

  def create
    super
    if @user.persisted?
      UserMailer.new_registration(@user).deliver
    end
  end

end

次に、ルートで:

devise_for :users, :controllers => { :registrations => "my_registrations" }
于 2014-01-08T04:10:09.860 に答える
45

ユーザーがDeviseにサインアップするとき、彼らはUsersController.

Userモデルにメール送信コードを追加したい場合があります。

たとえば、app/models/user.rb次のようになります。

class User < ActiveRecord::Base
  # ...

  after_create :send_admin_mail
  def send_admin_mail
    UserMailer.send_new_user_message(self).deliver
  end

  # ...
end

これは、Active Recordafter_createコールバックを利用して行われます。

于 2013-07-05T01:59:47.393 に答える