Ich verfolge die Rails-Tutorial von Michael HartlLernprogramm || IDs rememberd wenn aus der Datenbank des Benutzers zu entfernen
Erläuterung: Derzeit hundert Benutzer in der Datenbank. Ich erstelle 50 Konten mehr, sie erhalten Benutzer-ID 101 - 150. Dann zerstört der Admin sie. Wenn ich dann ein weiteres Konto erstelle, sollte es die Benutzer-ID 101 erhalten, weil die Benutzer 101-150 nicht mehr da sind. Aber es wird 151, also springt meine Benutzer-ID von 100 auf 151 mit nichts dazwischen.
Was verursacht das? Es ist etwas falsch, die Konten zu zerstören? unterhalb der Dateien und Konsolausgabe:
Die Ansicht:
(app/views/_user.html.erb)
<li>
<%= gravatar_for user, size: 50 %>
<%= link_to user.name, user %>
<% if current_user.admin? && !current_user?(user) %>
| <%= link_to "delete", user, method: :delete,
data: { confirm: "You sure?" } %>
<% end %>
</li>
Der Controller:
def destroy
User.find(params[:id]).destroy
flash[:success] = "User deleted"
redirect_to users_url
end
der Ausgabekonsole beim Löschen Benutzer:
Started DELETE "https://stackoverflow.com/users/102" for $IP at 2016-03-30 12:11:52 +0000
Processing by UsersController#destroy as HTML
Parameters: {"authenticity_token"=>"Kj+2TnvVk8jVrZi1leVeQRAjJbZsKqXAhA1cjK/WNDa4TieY54NdD6OCATNANFR0lh1trhi+ZzvMLhnirZnw+g==", "id"=>"102"}
User Load (0.3ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 1]]
User Load (0.2ms) SELECT "users".* FROM "users" WHERE "users"."id" = ? LIMIT 1 [["id", 102]]
(0.1ms) begin transaction
SQL (0.3ms) DELETE FROM "users" WHERE "users"."id" = ? [["id", 102]]
(10.7ms) commit transaction
Sind Sie sicher, dass Ihr Zerstörer funktioniert? – Albin
IDs sind eindeutig ... also einmal zugewiesen gibt es keinen neuen Benutzer bei dieser ID, es sei denn, Sie legen die Datenbank ab und beginnen von vorne. – toddmetheny
** "Wenn ich dann noch ein Konto erstelle, sollte es User ID 101 bekommen ..." ** - das ist einfach falsch. Warum würdest du denken, dass es _should_? Es sollte nicht. Aus Gründen der Effizienz in einigen db-Engines könnten ids sogar Nicht-Ganzzahlen sein, außerdem könnten sie nicht-geordnet und nicht-sequentiell sein. Sie sollten sich nicht darum kümmern, wie "ID" -Feld konstruiert wird: Es ist eine Pflicht der db-Engine, sich darum zu kümmern. – mudasobwa