2016-03-28 5 views
1

Ich habe Spalteninformationen zum Modell Benutzer hinzugefügt, die von Devise generiert wurden. Ich will Benutzer nicht dazu bringen, Feldinformationen durch Registrierung zu füllen. Ich erstellte Controller für andere Seiten wie ProfilWie kann ich mit Params korrekte Informationen erhalten?

Auf Seite Benutzerinfo Benutzer sollte in der Lage sein, seine Informationen zu bearbeiten.

Hier ist Ansicht:

<div id="page_wrapper"> 

    <h2>Hey, <%= @currentUser.username %>, add some information about you: </h2> 
    <%= form_for @currentUser.information do |f| %> 
    <p> 
     <%= f.label :information %><br /> 
     <%= f.text_area :information, autofocus: true %> 
    <p> 

    <p> 
     <%= f.submit "Save" %> 
    <p> 
    <% end %> 

</div> 

Application Controller:

class ApplicationController < ActionController::Base 
    protect_from_forgery with: :exception 
    before_action :configure_permitted_parameters, if: :devise_controller? 

    protected 
    def configure_permitted_parameters 
    devise_parameter_sanitizer.for(:sign_up) { |u| u.permit(:username, :information, :email, :password, :password_confirmation, :remember_me) } 
    devise_parameter_sanitizer.for(:sign_in) { |u| u.permit(:login, :information, :email, :password, :remember_me) } 
    devise_parameter_sanitizer.for(:account_update) { |u| u.permit(:username, :information, :email, :password, :password_confirmation, :current_password) } 
    end 
end 

Wenn ich versuche, es zu speichern, erhalte ich

nicht definierte Methode `Genehmigung‘ für nil: NilClass

Wie kann ich es beheben? Vielleicht gibt es einen besseren Weg, diesen Job zu machen? Ich möchte nicht das ganze Formular anzeigen, um das Passwort, den Benutzernamen usw. zu ändern. Nur Informationen.

Antwort

0

nicht definierte Methode `Genehmigung‘ für nil: NilClass

Sie tun es falsch. Ihr params enthält keinen Schlüssel :userinfo. Ihr params wird so aussehen: :user => {:information => 'value'}. Sie sollten Ihren Code unter

#controller 
def userinfo 
    @currentUser = User.find_by_id(current_user.id) 

    if @currentUser.update(user_params) 
    redirect_to myprofile_path 
    else 
    render 'userinfo' 
    end 
end 

protected 
def user_params 
    params.require(:user).permit(:information) 
end 

ändern Und auch, wie Sie Update ein bestimmter Datensatz versuchen, müssen Sie

<%= form_for @currentUser.information do |f| %> 

zu

<%= form_for @currentUser, method: put do |f| %> 

Schließlich ändern Wenn Sie eine post Route für diese entsprechende controller#action festgelegt haben, dann y Sie müssen es in put

+0

ändern Danke, aber jetzt bekomme ich einen anderen Fehler. Parameter fehlt oder der Wert ist leer: Benutzer Warum passiert es? – malworm

+0

@bg_mi Können Sie die Ausgabe von Parametern posten, die generiert werden? – Pavan

+0

ist das http://snag.gy/7b7ys.jpg das was du meinst? – malworm

Verwandte Themen