からユーザーのを削除する際にIDの思い出し、私はマイケル・ハートルチュートリアル||データベース
説明でRailsのチュートリアルを以下午前:現在百ユーザーのデータベースでは。私は50個のアカウントをさらに作成し、ユーザーID 101〜150を取得します。その後、管理者はそれらを破棄します。さらに別のアカウントを作成すると、ユーザー101〜150はもう存在しないため、ユーザーID 101を取得する必要があります。しかし、それは151になるので、私のユーザーIDは100から151へと飛び越えます。
この原因は何ですか?アカウントを破壊するのに間違ったことがありますか?ファイルとコンソール出力下記
ビュー:
(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>
コントローラ:
def destroy
User.find(params[:id]).destroy
flash[:success] = "User deleted"
redirect_to users_url
end
コンソール出力ユーザを削除する場合:
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
あなたの破壊は確実に機能しますか? – Albin
のIDは一意であるため、一度割り当てられると、データベースを削除して完全に開始しない限り、そのIDに新しいユーザーは存在しません。 – toddmetheny
** "まだ別のアカウントを作成すると、ユーザーID 101を取得する必要があります。" ** - これは間違っています。なぜあなたはそれをどう思いますか?それはしないでください。いくつかのdbエンジンの効率のために、idは非整数であってもよいし、順序付けされていなくても順序付けされていなくてもよい。 'id'フィールドがどのように構築されているか気にする必要はありません。それはそれを気にするdbエンジンの義務です。 – mudasobwa