2016-07-03 6 views
0

Ich habe den Mailer-Aufruf in meinem Benutzermodell auf einen benutzerdefinierten Devise-Controller verschoben und erhalte plötzlich keine E-Mails mehr in der Entwicklung. SMTP ist alles in config eingerichtet und funktioniert einwandfrei (ich weiß, weil es funktioniert, wenn der Mailer-Aufruf im Benutzermodell als :after_create ist - was übrigens nicht in der Produktion funktioniert).Warum bekomme ich "User Exists" zweimal, wenn ich die Entwicklungsausgabe auf Bash mit Tail aufzeichne?

Also lief ich tail -f log/development.log, traf vorlegen, um zu sehen, ob ein Routing-Konflikt durch meine Devise Erweiterung verursacht es gibt, und diese Aktion in der Ausgabe meiner #create

gefunden Erweiterungen
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 

Sieht aus wie meine Devise ist nicht sogar benutzt?

Hier ist die #create Aktion

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 

Mein Benutzermodell

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 

Und dann ist mein Weg devise_for :users, :controller => { registrations: 'registrations'}

Also ich denke, es eine zweiteilige Frage ist:

  1. Ist das Zweifache? le User Exists indikativ für etwas?
  2. Was ist falsch an meinem Setup? Ich habe die offizielle Rail docs zum
  3. T. gefolgt
+0

nur um ein bisschen mehr Kontext hinzuzufügen, können Sie Ihr 'user' Modell hinzufügen? – oreoluwa

+0

@oreoluwa hinzugefügt – sabaeus

Antwort

2

Zuerst ändern Sie Ihre devise Routing-config:

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

Und in Ihrer Benutzervalidierung, ich glaube, Sie die Option if entfernen sollten

validates :email, presence: true, uniqueness: true 

Ich denke, das sollte es beheben. Warum? Da die Eindeutigkeit zuerst prüfen würde, ob der Datensatz in der Datenbank existiert, würde die Option if dasselbe tun. Nicht ganz sicher, ob mein Gedanke stimmt, aber ich denke, das sollte das Problem sein.

Lassen Sie mich wissen, ob ich helfen konnte.

PS: Es ist eine bekannte Rails Fehler, der auch zweimal die SQL-Anweisungen in die Protokolle aussendet, ich glaube, es befestigt ist oder es gibt eine anhängige PR für sie, dies durch Setzen eines anderen Loggers in Ihrer Rails-Anwendung verursacht wird. Ich denke nicht, dass Ihre Beziehung damit zusammenhängt, weil die Ausführungszeit Ihrer SQL-Anweisungen variiert.

+0

Das hat funktioniert! Ich danke dir sehr! : D – sabaeus

+0

Es war der 'Controller:' über 'Controller:' im Router. – sabaeus

+1

Gern geschehen! Wie wäre es, wenn der 'Benutzer existiert 'doppelt geloggt wird? – oreoluwa

Verwandte Themen