2016-07-03 7 views
0

Я переместил вызов почтовой программы в моей модели пользователя на пользовательский контроллер Devise и внезапно больше не получал электронные письма в процессе разработки. SMTP настроен в конфигурации и работает корректно (я знаю, потому что он работает, когда вызов почтовой программы находится в модели пользователя как :after_create, который, кстати, не будет работать на производстве).Почему я получаю «Пользователь существует» дважды при регистрации выходных данных разработки в bash с хвостом?

Так что я побежал tail -f log/development.log, ударил представить, чтобы увидеть, если есть конфликт маршрутизации, вызванные моим расширением завещать, и нашел в выходе моего #create действия

Started POST "/users" for ::1 at 2016-07-03 14:48:06 -0700 
Processing by Devise::RegistrationsController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"blahblah", "user"=>{"email"=>"[email protected]", "firstname"=>"i", "lastname"=>"i", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Sign up"} 
    (0.3ms) BEGIN 
    User Exists (0.4ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 
    User Exists (0.3ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = '[email protected]' LIMIT 1 
    SQL (0.6ms) INSERT INTO "users" ("email", "encrypted_password", "firstname", "lastname", "created_at", "updated_at") VALUES ($1, $2, $3, $4, $5, $6) RETURNING "id" [["email", "[email protected]"], ["encrypted_password", "$2a$10$8YxM8UHDnwS8lcxhiE6Gn.VAbLo8bE8HggCQVuIPl8XYXaevHt8F."], ["firstname", "i"], ["lastname", "i"], ["created_at", "2016-07-03 21:48:06.899722"], ["updated_at", "2016-07-03 21:48:06.899722"]] 
    (0.4ms) COMMIT 

выглядит как мои расширения DEViSE не даже будучи использованным?

Вот действие #create

class RegistrationsController < Devise::RegistrationsController 
    def create 
    @user = User.new(sign_up_params) 
    if @user.save 
     UserMailer.new_user(@user).deliver_now 
     #AdminMailer.new_user_waiting_for_approval(@admin).deliver_now 
    else 
     render :action => 'new' 
    end 
    end 
private 
    def sign_up_params 
     params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation, :approved) 
    end 
end 

Моя модель пользователя

class User < ActiveRecord::Base 


devise :database_authenticatable, :registerable, 
     :recoverable, :rememberable, :trackable, :validatable 
    has_many :items, dependent: :destroy 
    validates :email, presence: true, uniqueness: true, if: -> { self.email.present? } 
    validates :firstname, presence: true 
    validates :lastname, presence: true 

    def active_for_authentication? 
    super && approved? 
    end 

    def inactive_message 
    if !approved? 
     :not_approved 
    else 
     super # Use whatever other message 
    end 
    end 
end 

И тогда мой маршрут devise_for :users, :controller => { registrations: 'registrations'}

Так что я предполагаю, что это две части вопроса:

  1. Является ли это le User Exists указывает на что-нибудь?
  2. Что не так с моей настройкой? Я следовал документы официального рельса к Т.
+0

Чтобы добавить немного больше контекста, вы могли бы добавить свою модель пользователя? – oreoluwa

+0

@oreoluwa добавлено – sabaeus

ответ

2

Сначала измените Завещание маршрутизации конфигурации для:

devise_for :users, controllers: { registrations: 'registrations'} 

И в вашей проверке пользователя, я думаю, вы должны удалить опцию if

validates :email, presence: true, uniqueness: true 

Я думаю, что это исправить. Зачем? Поскольку уникальность сначала проверит, что запись существует в db, тогда опция if также сделает то же самое. Не совсем уверен, что моя мысль правильная, но я думаю, что это должна быть проблема.

Сообщите мне, если я был в состоянии помочь.

PS: Там это известная Рельсы ошибка, которая также излучает ваши операторы SQL в журналах дважды, я думаю, что это фиксируется или есть отложенный PR для него, это вызвано установкой другого регистратора в вашем приложении Rails. Я не думаю, что ваше отношение связано с этим, из-за того, что время, затраченное на выполнение SQL-операторов, выполняется.

+0

Это сработало! Спасибо огромное! : D – sabaeus

+0

Это был 'контроллер:' над 'контроллерами:' в маршрутизаторе. – sabaeus

+1

Добро пожаловать! Как насчет журнала «Пользователь существует» дважды? – oreoluwa