Ruby on rails 教程| | ID';删除用户时请记住';从数据库中删除
我正在学习MichaelHartl的Rails教程 说明:目前数据库中有100个用户。我再创建50个帐户,他们的用户id是101-150。然后管理员销毁它们。当我创建另一个帐户时,它应该获得用户id 101,因为用户101-150已经不在了。但它得到151,所以我的用户id从100跳到151,中间没有任何东西 这是什么原因?那么销毁账户有什么问题吗?下面是文件和控制台输出: 观点:Ruby on rails 教程| | ID';删除用户时请记住';从数据库中删除,ruby-on-rails,ruby,sqlite,activerecord,railstutorial.org,Ruby On Rails,Ruby,Sqlite,Activerecord,Railstutorial.org,我正在学习MichaelHartl的Rails教程 说明:目前数据库中有100个用户。我再创建50个帐户,他们的用户id是101-150。然后管理员销毁它们。当我创建另一个帐户时,它应该获得用户id 101,因为用户101-150已经不在了。但它得到151,所以我的用户id从100跳到151,中间没有任何东西 这是什么原因?那么销毁账户有什么问题吗?下面是文件和控制台输出: 观点: (app/views/_user.html.erb) <li> <%= gravatar_fo
(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>
删除用户时的控制台输出:
Started DELETE "/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
表id列是自动递增的。有关mysql,请参阅。即使删除了记录,也不会再次使用自动增量字段,除非删除数据库或对其调用Alter table
这样做是有充分理由的,这样就不会错误地分配孤立关系,这可能会导致数据不一致。您确定您的销毁工作正常吗?id是唯一的……因此,一旦分配了id,就不会有新用户,除非您删除数据库并完全重新开始。“当我创建另一个帐户时,它应该获得用户id 101…”-这是错误的。为什么你认为应该?不应该。为了提高某些db引擎的效率,id甚至可能是非整数,而且它们可能是非顺序和非序列的。你不应该关心
id
字段是如何构造的:db引擎有责任处理它。好吧,我的想法是错误的。这就是它的工作原理吗?用户id一旦分配就不能或不应该再使用了?顺便说一下。Fluffykittens?为什么要编辑rails?它显示了我使用的是哪本书?“即使删除记录,也不会再次使用自动增量字段”-这是错误的。可以在所有已知的[对我来说]中设置当前的自动增量值db引擎,包括但不限于mysql
和postgresql
。
Started DELETE "/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