2016-06-13 17 views
0

Ich experimentiere mit einer Rails App - Ich benutze Devise für Benutzeranmeldung, und ich versuche, es einzurichten, so dass jedes Mal ein Benutzer erfolgreich anmeldet Ein bestimmter Eintrag wird automatisch in ein Modell mit der Bezeichnung reports eingefügt.Rails - Auto-Formular senden auf Devise Login, undefined Methode `Erlaubnis '

In meiner Devise Sitzungssteuerung, ich habe folgende Maßnahmen zu einer erfolgreichen Benutzeranmeldung bezogen werden:

def create 
    self.resource = warden.authenticate!(auth_options) 
    sign_in(resource_name, resource) 
    yield resource if block_given? 
    respond_with resource, location: after_sign_in_path_for(resource) 
end 

def after_sign_in_path_for(resource) 
    Report.create(report_params({"comment" => "user logged in"})) 
end 

private 
    def report_params(params) 
     params.permit(:comment) 
    end 

Also, wenn das nicht klar ist, was ich meine zu tun ist, um einen neuen Eintrag jedes Mal in reports erstellen Ein Benutzer meldet sich an und dieser Eintrag liest immer "angemeldeter Benutzer".

Allerdings, wenn ich versuche, dies zu laufen ließe, erhalte ich folgende Fehlermeldung:

undefined method `permit' for {"comment"=>"user logged in"}:Hash 

Ich weiß, dass diese genaue Operation ein bisschen sinnlos oder überflüssig erscheinen mag - wie gesagt, ich bin nur zu experimentieren, Aber wenn ich das richtig mache, kann es mir helfen, eine andere App neu zu strukturieren, an der ich gearbeitet habe (ich denke über JSONs anstelle dieses festen Eintrags nach).

Wenn jemand die Bedeutung dieses Fehlers erklären und mir helfen könnte, herauszufinden, was ich falsch mache (oder wenn dies der beste Weg ist, um eine solche Aufgabe zu erfüllen), würde das sehr geschätzt werden.

Antwort

1

Sie müssen nicht, dies zu tun, nur diese Aktion erstellen in Ihrer hinzufügen

def create 
    self.resource = warden.authenticate!(auth_options) 
    Report.create(comment: "user logged in") 
    sign_in(resource_name, resource) 
    yield resource if block_given? 
    respond_with resource, location: after_sign_in_path_for(resource) 
end 

So ass sobald die Ressource dort authentifiziert wird, wird ein neuer Bericht nach jedem einzelnen sign_in erstellt werden. Kommentar unten, wenn Sie mehr

1

Die Antwort brauchen gegeben durch @Chirag Arya sollte für Sie arbeiten. Ich werde mich darauf konzentrieren, den Fehler zu erklären.

undefined method `permit' for {"comment"=>"user logged in"}:Hash

Das Problem ist die permit sollte auf ActionController::Parameters genannt werden, aber Sie rufen es auf einem Hash. Beachten Sie, dass Sie die normale params mit einem Hash ({"comment"=>"user logged in"}) in report_params Methode überschreiben.

h = {"comment"=>"user logged in"} 
=> {"comment"=>"user logged in"} 

h.permit 
NoMethodError: undefined method `permit' for {"comment"=>"user logged in"}:Hash 

a = ActionController::Parameters.new({"comment"=>"user logged in"}) 
=> {"comment"=>"user logged in"} 

a.permit(:comment) 
=> {"comment"=>"user logged in"} 

Auch bemerkte ich, dass Sie falschafter_sign_in_path_for(resource) verwenden, eine Devise Hilfsmethode, der Server einen anderen Zweck gedacht ist. See why this method is used

Verwandte Themen