2016-01-18 17 views
5

Ich habe ein Anmeldeformular für meine Website erstellt und die folgenden Parameter in meine users_controller.rb-Datei aufgenommen, um die in die entsprechenden Felder eingegebenen Daten in meiner Datenbank zu speichern. Wenn ich versuche, mein erstelltes Anmeldeformular zu senden, sagt mir die Konsole aus irgendeinem Grund, dass Vorname und Nachname keine erlaubten Parameter sind. Der Fehler ist:Unerreichte Parameter in Rails

Unzulässige Parameter: Vorname, Nachname

Die Anmeldung ist erfolgreich, und die anderen Parameter werden in die Datenbank eingegeben ganz gut; Die Spalten firstname und lastname bleiben jedoch leer.

users_controller.rb

class UsersController < ApplicationController 

def create 
    @user = User.new(user_params) 
    if @user.save 
    flash[:success] = "You signed up successfully" 
    flash[:color] = "valid" 
    redirect_to @user 
    else 
    flash[:notice] = "Form is invalid" 
    flash[:color] = "invalid" 
    render "new" 
    end 
end 

private 
def user_params 
    params.require(:user).permit(:firstname, :lastname, :email, :password, :password_confirmation) 
end 


def show 
    @user = User.find(params[:id]) 
end 

def new 
end 

end 

new.html.erb

<%= form_for(:user, :url => {:controller => 'users', :action => 'create'}) do |f| %> 

    </br> <%= f.text_field :firstname, placeholder: 'First Name' %> 
    </br> <%= f.text_field :lastname, placeholder: 'Last Name' %> 
    </br> <%= f.text_field :email, placeholder: 'Email' %> 
    </br> <%= f.password_field :password, placeholder: 'Password' %> 
    </br> <%= f.password_field :password_confirmation, placeholder: 'Confirm Password' %> 


    <%= f.submit :Register %> 
    <% end %> 

schema.rb

create_table "users", force: :cascade do |t| 
    t.string "firstname" 
    t.string "lastname" 
    t.string "email" 
    t.datetime "created_at",  null: false 
    t.datetime "updated_at",  null: false 
    t.string "password_digest" 
    t.string "password" 
    end 

user.rb

class User < ActiveRecord::Base 

    has_secure_password 

    validates_length_of :password, :in => 6..20, :on => :create 
    validates :password_confirmation, presence: true, if: -> { new_record? || changes["password"] } 

end 

Eingehende Parameter (Konsole)

Processing by UsersController#create as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"1hHzXu2RZR3G3Zx4PoOeDu3DlU31V5abDH/UmNx+w9hs/gacgRYhFgpe6cm0d7cLaTtZdfROi3oUrw/m5EcTAQ==", "user"=>{"firstname"=>"Milhouse", "lastname"=>"Vanhoutten", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]"}, "commit"=>"Register"} 
Unpermitted parameters: firstname, lastname, 
    (0.4ms) begin transaction 
    SQL (0.6ms) INSERT INTO "users" ("email", "password_digest", "created_at", "updated_at") VALUES (?, ?, ?, ?) [["email", "[email protected]"], ["password_digest", "$2a$10$T.iv9b3BjG.t1FJvT7YsVOZf0wNOD2QSFA9lP8RGOiE1h5AaDdB2q"], ["created_at", "2016-01-18 22:12:32.764948"], ["updated_at", "2016-01-18 22:12:32.764948"]] 
    (7.0ms) commit transaction 
Redirected to /users/6 
Completed 302 Found in 122ms (ActiveRecord: 8.7ms) 
+0

Können Sie Ihr Benutzerschema (aus der Datei schema.rb) anzeigen? – SteveTurczyn

+0

Eingereichten Params-Hash anzeigen –

+0

@SteveTurczyn Siehe oben hinzugefügtes Schema. – Brittany

Antwort

1

Es ist wie die Parameter sieht kann kommen in als

{:firstname => 'foo', :lastname => 'baz'} 

statt

{"user" => {"firstname" => "foo", "lastname" => "baz"}} 

Es kann wahrscheinlich auf das Formular zurückverfolgt werden.

+1

Sorry für die newb Antwort - aber warum würde dies auf diese zwei Werte passieren und nicht z. der E-Mail-Wert? Wie kann ich das beheben? – Brittany

+0

Das ist eigentlich fair. Können Sie die eingehenden Parameter anzeigen? Sie sollten in der Rails-Webserver-Ausgabe gedruckt werden. – errata

+0

Siehe oben die eingehenden Parameter - und vielen Dank, schätzen Sie es. – Brittany