2016-06-04 6 views
0

Ich verwendete Devise, um ein Routine-Benutzermodul einzurichten, aber dann wollte ich weitere Variablen hinzufügen und habe Probleme. Ich folgte this tutorial und folgende Änderungen vorgenommen:Benutzerdefinierte Variablen für Benutzer speichern, aber nicht in der Konsole

Meine routes Linie für devise jetzt liest:

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

Mein registrations_controller ist:

class RegistrationsController < Devise::RegistrationsController 
    private 

    def sign_up_params 
    params.require(:user).permit(:first_name, :last_name, :role, :gender, :dob, :age, :goal_weight, :goal_muscle, :goal_bodyimage, :goal_performance, :goal_endurance, :goal_health, :email, :password, :password_confirmation) 
    end 

    def account_update_params 
    params.require(:user).permit(:first_name, :last_name, :role, :gender, :dob, :age, :goal_weight, :goal_muscle, :goal_bodyimage, :goal_performance, :goal_endurance, :goal_health, :email, :password, :password_confirmation, :current_password) 
    end 
end 

Und ich hinzugefügt, um die Felder zu meinen new und edit Ansichten im Stil der anderen.

Hier ist meine new Form:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name)) do |f| %> 
    <%= devise_error_messages! %> 

    <div class="field text-left"> 
    <%= f.label :first_name %><br /> 
    <%= f.text_field :first_name, autofocus: true, class: "form-control" %> 
    </div> 

    <div class="field text-left"> 
    <%= f.label :last_name %><br /> 
    <%= f.text_field :last_name, class: "form-control" %> 
    </div> 

    <div class="field text-left"> 
    <%= f.label :gender %><br /> 
    <%= f.select :gender, options_for_select([['Prefer Not to Say', 'Prefer Not to Say'],['Female', 'Female'],['Male', 'Male']]), {}, {class: "form-control"} %> 
    </div> 

    <div class="field text-left"> 
    <%= f.label :dob %><br /> 
    <%= f.date_field :dob, class: "form-control" %> 
    </div> 

    <div class="field text-left"> 
    <%= f.label "What are your goals?" %><br /> 
    <p><%= f.check_box :goal_weight, value: "1", checked: false, options: {} %> Lose Weight<br> 
    <%= f.check_box :goal_muscle, value: "1", checked: false, options: {} %> Gain Muscle<br> 
    <%= f.check_box :goal_bodyimage, value: "1", checked: false, options: {} %> Better Overall Body Composition<br> 
    <%= f.check_box :goal_performance, value: "1", checked: false, options: {} %> Increase Sports Performance<br> 
    <%= f.check_box :goal_endurance, value: "1", checked: false, options: {} %> Gain Endurance<br> 
    <%= f.check_box :goal_health, value: "1", checked: false, options: {} %> Better Health</p> 
    </div> 

    <div class="field text-left"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email, class: "form-control" %> 
    </div> 

    <div class="field text-left"> 
    <%= f.label :password %> 
    <% if @minimum_password_length %> 
    <em>(<%= @minimum_password_length %> characters minimum)</em> 
    <% end %><br /> 
    <%= f.password_field :password, autocomplete: "off", class: "form-control" %> 
    </div> 

    <div class="field text-left"> 
    <%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation, autocomplete: "off", class: "form-control" %> 
    </div> 

    <div class="actions"> 
    <%= f.submit "Sign up", class: "btn btn-primary" %> 
    </div> 
<% end %> 

Und hier ist meine edit Form:

<%= form_for(resource, as: resource_name, url: registration_path(resource_name), html: { method: :put }) do |f| %> 
    <%= devise_error_messages! %> 

    <div class="field"> 
    <%= f.label :first_name %><br /> 
    <%= f.text_field :first_name, autofocus: true, class: "form-control" %> 
    </div> 

    <div class="field"> 
    <%= f.label :last_name %><br /> 
    <%= f.text_field :last_name, class: "form-control" %> 
    </div> 

    <div class="field"> 
    <%= f.label :gender %><br /> 
    <%= f.select :gender, options_for_select([['Prefer Not to Say', 'Prefer Not to Say'],['Female', 'Female'],['Male', 'Male']]), {}, {class: "form-control"} %> 
    </div> 

    <div class="field"> 
    <%= f.label :dob %><br /> 
    <%= f.date_field :dob, class: "form-control" %> 
    </div> 

    <div class="field"> 
    <%= f.label "What are your goals?" %><br /> 
    <p><%= f.check_box :goal_weight, value: "1", checked: false, options: {} %> Lose Weight<br> 
    <%= f.check_box :goal_muscle, value: "1", checked: false, options: {} %> Gain Muscle<br> 
    <%= f.check_box :goal_bodyimage, value: "1", checked: false, options: {} %> Better Overall Body Composition<br> 
    <%= f.check_box :goal_performance, value: "1", checked: false, options: {} %> Increase Sports Performance<br> 
    <%= f.check_box :goal_endurance, value: "1", checked: false, options: {} %> Gain Endurance<br> 
    <%= f.check_box :goal_health, value: "1", checked: false, options: {} %> Better Health</p> 
    </div> 

    <div class="field"> 
    <%= f.label :email %><br /> 
    <%= f.email_field :email, class: "form-control", autofocus: true %> 
    </div> 

    <% if devise_mapping.confirmable? && resource.pending_reconfirmation? %> 
    <div>Currently waiting confirmation for: <%= resource.unconfirmed_email %></div> 
    <% end %> 

    <div class="field"> 
    <%= f.label :password %> <i>(leave blank if you don't want to change it)</i><br /> 
    <%= f.password_field :password, class: "form-control", autocomplete: "off" %> 
    </div> 

    <div class="field"> 
    <%= f.label :password_confirmation %><br /> 
    <%= f.password_field :password_confirmation, class: "form-control", autocomplete: "off" %> 
    </div> 

    <div class="field"> 
    <%= f.label :current_password %> <i>(we need your current password to confirm your changes)</i><br /> 
    <%= f.password_field :current_password, class: "form-control", autocomplete: "off" %> 
    </div> 

    <div class="actions"> 
    <%= f.submit "Update My Info", class: "btn btn-primary" %> 
    </div> 
<% end %> 

Alle Formen richtig machen. Wenn ich submit oder update drücke, erhalte ich eine Blitzmeldung, dass die Information erfolgreich gespeichert worden ist.

Wenn ich Informationen speichern ich so etwas wie dies in dem Server, der zeigt, dass die neuen Informationen, einschließlich der Kontrollkästchen Werte wird gespeichert werden:

Started PUT "/users" for ::1 at 2016-06-03 17:17:42 -0700 
Processing by RegistrationsController#update as HTML 
    Parameters: {"utf8"=>"✓", "authenticity_token"=>"DomUJ8aFghDIOPYsWQPlB7KnmFt27ZDcPOf7SdG4PWvI8QgI3OZP5mscbVfpGtlNpIZKTIqhL+RRwj1/3VT9AQ==", "user"=>{"first_name"=>"Test", "last_name"=>"Testerson", "gender"=>"Prefer Not to Say", "dob"=>"2008-08-08", "goal_weight"=>"0", "goal_muscle"=>"1", "goal_bodyimage"=>"0", "goal_performance"=>"1", "goal_endurance"=>"0", "goal_health"=>"0", "email"=>"[email protected]", "password"=>"[FILTERED]", "password_confirmation"=>"[FILTERED]", "current_password"=>"[FILTERED]"}, "commit"=>"Update My Info"} 
    User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? ORDER BY "users"."id" ASC LIMIT 1 [["id", 2]] 
    User Load (0.1ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 2]] 
    (0.1ms) begin transaction 
    SQL (0.4ms) UPDATE "users" SET "goal_weight" = ?, "goal_performance" = ?, "updated_at" = ? WHERE "users"."id" = ? [["goal_weight", 0], ["goal_performance", 1], ["updated_at", "2016-06-04 00:17:43.005855"], ["id", 2]] 
    (0.6ms) commit transaction 
Redirected to http://localhost:3000/ 
Completed 302 Found in 148ms (ActiveRecord: 1.2ms) 

Hier ist, wo das Problem beginnt. Als ich danach auf mein edit Seite zurück, alle neuen Variablen sind in ihren Bereichen mit Ausnahme der Kontrollkästchen (ganz gleich angezeigt, wie viele/wenige waren zuvor geprüft:

Sample edit form, after new variables have saved

Dann, wenn ich überprüfen der Benutzer in meiner Konsole sind KEINE der neuen Variablen angezeigt:

irb(main):007:0> User.second 
    User Load (7.5ms) SELECT "users".* FROM "users" ORDER BY "users"."id" ASC LIMIT 1 OFFSET 1 
=> #<User id: 2, email: "[email protected]", encrypted_password: "$2a$11$y9/F8GQ9sTUK7Hm.b81Eo.VEbvvZ93XdOdZivAgQxhB...", reset_password_token: nil, reset_password_sent_at: nil, remember_created_at: nil, sign_in_count: 1, current_sign_in_at: "2016-06-04 00:04:34", last_sign_in_at: "2016-06-04 00:04:34", current_sign_in_ip: "::1", last_sign_in_ip: "::1", created_at: "2016-06-04 00:04:34", updated_at: "2016-06-04 00:17:43"> 

auf der anderen Seite, ich CAN sie an anderen Orten erb wie <%= @user.first_name %> mit aufrufen

01.

Kann mir jemand helfen, das herauszufinden, damit alle neuen Variablen gespeichert werden?

ZUSÄTZLICHE INFORMATIONEN:

Hier ist die Migration, die die neuen Variablen dem user Modell hinzugefügt:

class FlushOutUser < ActiveRecord::Migration 
    def change 
    add_column :users, :full_name, :string 
    add_column :users, :first_name, :string 
    add_column :users, :last_name, :string 
    add_column :users, :role, :string 
    add_column :users, :gender, :string 
    add_column :users, :dob, :date 
    add_column :users, :age, :integer 
    add_column :users, :goal_weight, :integer 
    add_column :users, :goal_muscle, :integer 
    add_column :users, :goal_bodyimage, :integer 
    add_column :users, :goal_performance, :integer 
    add_column :users, :goal_endurance, :integer 
    add_column :users, :goal_health, :integer 
    end 
end 
+0

Geben Sie 'User' und'> User.second.first_name' in die Konsole ein - was bekommen Sie in jedem Fall?Wie gehst du zurück zu deiner Bearbeitungsseite? Werden Sie umgeleitet, oder geben Sie die Adresse der Bearbeitungsseite in die Adressleiste ein oder drücken Sie die Browser-Zurück-Taste? – Anand

+0

'Benutzer' gibt mir' Benutzer (ID: Ganzzahl, E-Mail: Zeichenfolge, verschlüsseltes_Kennwort: Zeichenfolge, Kennwort_zurücksetzen_Zeichenfolge: Zeichenfolge, Kennwort_zur_Rücksetzung: DatumZeit, Erinnerung_Gebraucht_Zeit: DatumZeit, Vorzeichen_Zahl: Ganzzahl, Aktuelle_Zeichen_in_Zeit: DatumZeit, Letzte_Zeichen_in_Zeit: DatumZeit, Aktuelle_Zeichen_In_Zip: Zeichenfolge, Letzte_Zeichen_In_Zip : string, created_at: datetime, updated_at: datetime) ' – Liz

+0

' User.second.first_name' gibt mir 'User Load (10.8ms) SELECT "Benutzer". * FROM "Benutzer" ORDER BY "Benutzer". "ID" ASC LIMIT 1 OFFSET 1 => "Test" ' – Liz

Antwort

0

Remove geprüft: false aus allen Kontrollkästchen. Dies sollte das Problem mit dem Kontrollkästchen beheben. Zum Beispiel:

<%= f.check_box :goal_weight, value: "1", options: {} %> Lose Weight<br> 

Update: Die Benutzer-Tabelle hat die benutzerdefinierten Feldspalten hat - wie Sie in Ihrem Kommentar erwähnt (aber in der Frage Konsolenausgabe nicht erwähnt), gibt es ein Auslassungszeichen (...) am Ende des Benutzers in der Konsolenausgabe. Dies bedeutet, dass es mehr Felder gibt.

+0

Dies behebt einige der Probleme. Wenn sie geändert werden, behalten sie ihren Wert bei, wenn Sie die Bearbeitungsseite verlassen und erneut eingeben. – Liz

+0

Wenn ich jedoch 'User.second' in die Konsole lege, erscheinen die neuen Variablen immer noch nicht: ' User Load (0.3ms) SELECT "Benutzer". * FROM "Benutzer" ORDER BY "Benutzer". "ID" ASC LIMIT 1 OFFSET 1 => # ' – Liz

Verwandte Themen