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:
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
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
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
'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
' 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