Rails-Devise wyślij e-mail użytkownika po rejestracji / Utwórz
Jestem całkiem nowy w rails i staram się coś rozgryźć. Niedawno dostałem całą konfigurację Mailera i działał dobrze. Ale staram się dodać drugi mailer dla działań użytkownika i to nie wydaje się działać.
Próbuję osiągnąć to, że użytkownik rejestruje się, wysyła e-mail do administratora, a następnie administrator musi włączyć użytkownika. Obecnie, gdy administrator włączy użytkownika, wyśle mu e-mail, ale z jakiegoś powodu mój nowo utworzony e-mail użytkownika nie odpala. Myślę, że to jest ponieważ moja metoda tworzenia nie działa, gdzie ją umieścić? Czy muszę nadpisać metodę użytkownika?
Mój Kontroler UserMailer:
class UserMailer < ActionMailer::Base
default from: "[email protected]"
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 => '[email protected]', :subject => "New User created please review and enable.")
end
end
My 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
Ale ta metoda create nigdy nie zostanie uruchomiona. Co się mylę? Czy jest inna metoda, którą muszę umieścić UserMailer.send_new_user_message (@user).dostarczyć?
2 answers
Kiedy użytkownicy rejestrują się w Devise, nie przechodzą przez UsersController
.
Możesz dodać kod wysyłający pocztę w modelu User
.
Na przykład w 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
Odbywa się to poprzez wykorzystanie Active Record after_create
callback.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-05 02:06:08
E-maile potwierdzające powinny być wysyłane z kontrolera. Można w prosty sposób nadpisać wartości domyślne Devise::RegistrationsController
.
Utwórz plik app/controllers/my_registrations_controller.rb
(nazwij to jak chcesz)
class MyRegistrationsController < Devise::RegistrationsController
def create
super
if @user.persisted?
UserMailer.new_registration(@user).deliver
end
end
end
Następnie w Twoich trasach:
devise_for :users, :controllers => { :registrations => "my_registrations" }
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-02-18 23:56:42