Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 教程| | ID';删除用户时请记住';从数据库中删除_Ruby On Rails_Ruby_Sqlite_Activerecord_Railstutorial.org - Fatal编程技术网

Ruby on rails 教程| | ID';删除用户时请记住';从数据库中删除

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

我正在学习MichaelHartl的Rails教程

说明:目前数据库中有100个用户。我再创建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> 
删除用户时的控制台输出:

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