教程||从数据库

时间:2016-03-30 12:36:42

标签: ruby-on-rails ruby sqlite activerecord railstutorial.org

我正在关注Michael Hartl的Rails教程

  

说明:目前数据库中有一百个用户。我创建了50个帐户,他们获得了用户ID 101 - 150.然后管理员销毁它们。当我然后创建另一个帐户时,它应该获得用户ID 101,因为用户101 -150不再存在。但它得到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 "/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

1 个答案:

答案 0 :(得分:0)

表id列是自动递增。对于mysql,请参阅doc。即使删除了记录,也不会再次使用自动增量字段,除非您删除数据库或在其上调用Alter表。

为什么要这样做是有充分理由的,因此不会错误地分配孤立关系,这可能会导致数据不一致。