2017-12-31 41 views
0

Wenn Sie versuchen und anmelden (/ users/sign_up), ist ein Fehler aufgetreten.NoMethodError in Registrierungen # Neu

NoMethodError in Registrations#new 
Showing /home/ubuntu/workspace/app/views/devise/registrations/new.html.erb where line #13 raised: 
undefined method `user_name' for #<User id: nil, email: "", created_at: nil, updated_at: nil> 

Ich bin ein Anfänger nach einem Kurs. Mein Freund hat diesen Fehler ebenfalls erhalten. Ich bin mir nicht sicher, wie es zu beheben, so ist hier mein Code des registration_controller:

class RegistrationsController < Devise::RegistrationsController 

    private 

    def sign_up_params 
    params.require(:user).permit(:email, :user_name, :password, :password_confirmation) 
    end 

    def account_update_params 
    params.require(:user).permit(:email, :user_name, :password, :password_confirmation, :current_password) 
    end 
end 

Und hier ist die new.html.erb Datei der devise/Anmeldungen/new.html.erb:

<div class="registration-bg"> 
    <div class="container"> 
    <div class="row"> 
     <div class="col-md-4 col-md-offset-4"> 
     <div class="log-in panel"> 
      <div class="panel-heading"> 
      <h2>Create Your Account</h2> 
      </div> 
      <%= simple_form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
      <%= f.error_notification %> 
      <div class="panel-body"> 
       <%= f.input :email, required: true, autofocus: true, label: false, placeholder: 'Email', input_html: { class: 'input-lg' } %> 
       <%= f.input :user_name, required: true, label: false, placeholder: 'User Name', input_html: { class: 'input-lg' } %> 
       <%= f.input :password, required: true, label: false, placeholder: 'Password', input_html: { class: 'input-lg' } %> 
       <%= f.input :password_confirmation, required: true, label: false, placeholder: 'Confirm Password', input_html: { class: 'input-lg' } %> 
       <%= f.button :submit, "Sign up", class: 'btn-lg btn-info btn-block' %> 
      </div> 
      <% end %> 
     </div> 
     </div> 
    </div> 
    </div> 
</div> 
+1

Scheint user_name Spalte zu sein, ist in Benutzertabelle nicht verfügbar. –

+0

@SampatBadhe Also muss ich Rake generieren Modell laufen lassen? – Freddee

+0

Sie haben bereits ein Benutzermodell. Sie müssen lediglich eine Migration hinzufügen, um die Spalte 'user_name' hinzuzufügen. –

Antwort

1

ActiveModel akzeptiert Felder, die Sie in Ihrem Modell definiert haben. Ihr user Objekt sieht wie folgt aus

#<User id: nil, email: "", created_at: nil, updated_at: nil> 

Sie eine Migration ausgeführt werden kann und die Steuerung nicht NoMethodError wieder beschweren.

rails g migration AddUserNameToUser user_name:string 

dann laufen,

rails db:migrate 
+0

Wenn ich rails g benutzeuserNameToUser benutzername: string, es sagt: R über Spring preloader in Prozess 6548 konnte Generator 'AddUserNameToUser' nicht finden. Vielleicht meintest du "generator", "erb: mailer" oder "controller". Führe 'rails generate --help' für weitere Optionen aus. – Freddee

+0

Mein schlechtes, ich habe einen Tippfehler gemacht. Es sollte 'Schienen g Migration AddUserNameToUser user_name: string' sein – PrimeTimeTran