Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/56.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 在Rails控制台中发生意外行为_Ruby On Rails_Rails Activerecord - Fatal编程技术网

Ruby on rails 在Rails控制台中发生意外行为

Ruby on rails 在Rails控制台中发生意外行为,ruby-on-rails,rails-activerecord,Ruby On Rails,Rails Activerecord,轨道3.2 我正在一个Rails控制台会话中,我正在尝试通过id查找一个公司。我有一个带有id列的公司表 是的 以下是我在控制台中得到的信息: Company Load (161.2ms) SELECT `companies`.* FROM `companies` WHERE `companies`.`slug` = '1403045688' LIMIT 1 EXPLAIN (162.2ms) EXPLAIN SELECT `companies`.* FROM `companies`

轨道3.2

我正在一个Rails控制台会话中,我正在尝试通过id查找一个公司。我有一个带有id列的公司表

是的

以下是我在控制台中得到的信息:

  Company Load (161.2ms)  SELECT `companies`.* FROM `companies` WHERE `companies`.`slug` = '1403045688' LIMIT 1
  EXPLAIN (162.2ms)  EXPLAIN SELECT `companies`.* FROM `companies` WHERE `companies`.`slug` = '1403045688' LIMIT 1
EXPLAIN for: SELECT  `companies`.* FROM `companies`  WHERE `companies`.`slug` = '1403045688' LIMIT 1
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                                               |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
|  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Impossible WHERE noticed after reading const tables |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
1 row in set (0.20 sec)

  Company Load (1.6ms)  SELECT `companies`.* FROM `companies` WHERE `companies`.`id` = '1403045688' LIMIT 1
  EXPLAIN (80.7ms)  EXPLAIN SELECT `companies`.* FROM `companies` WHERE `companies`.`id` = '1403045688' LIMIT 1
EXPLAIN for: SELECT  `companies`.* FROM `companies`  WHERE `companies`.`id` = '1403045688' LIMIT 1
+----+-------------+-----------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table     | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+----+-------------+-----------+-------+---------------+---------+---------+-------+------+-------+
|  1 | SIMPLE      | companies | const | PRIMARY       | PRIMARY | 182     | const |    1 |       |
+----+-------------+-----------+-------+---------------+---------+---------+-------+------+-------+
1 row in set (0.08 sec)

=> #<Company id: "1403045688", name: "AAA Electric", slug: "aaa-electric-inc", created_at: "2014-06-17 22:54:48", updated_at: "2016-03-12 05:13:26">
它不应该直接按id搜索,而不是先用slug搜索吗?为什么它看起来很困惑,想要解释这个问题

当您使用find方法时,它将同时使用slug和id列来查找记录,如果您希望只按id搜索记录,则需要将代码更改为类似以下内容:

company=company.whereid:1403045688.take

当您使用find方法时,它将同时使用slug和id列来查找记录,如果您希望只按id搜索记录,则需要将代码更改为类似以下内容:


company=company.whereid:1403045688.拿着

你好像在用友好的宝石,是吗?如果是,您需要更新gem,因为从V5开始禁用查找器覆盖。当我在Gemfile.lock中grep for friendly_id时,我得到:friendly_id~>4.0,>=4.0.9 friendly_id 4.0.10.1 friendly_id您建议我使用gem的5.0版本吗?是的,如果不希望主键被slug.覆盖的默认行为,则始终需要指定要查询的列。您可能还需要更改其他位置的代码,因为对slug的调用已更改,例如User.friendly.findparams[:id]参见friendly_id 5具有ActiveRecord 4依赖项。我使用的是Rails 3.2。哦,是的……那么你可能不得不忍受这一点……你似乎使用了友好的id gem,是吗?如果是,您需要更新gem,因为从V5开始禁用查找器覆盖。当我在Gemfile.lock中grep for friendly_id时,我得到:friendly_id~>4.0,>=4.0.9 friendly_id 4.0.10.1 friendly_id您建议我使用gem的5.0版本吗?是的,如果不希望主键被slug.覆盖的默认行为,则始终需要指定要查询的列。您可能还需要更改其他位置的代码,因为对slug的调用已更改,例如User.friendly.findparams[:id]参见friendly_id 5具有ActiveRecord 4依赖项。我使用的是Rails 3.2.Ohh是的……那么你可能不得不忍受这一点……为什么要使用Company.whereid:1403045688而不是Company.find_by_id 1403045688?因为在5.0版本之前,FriendlyId总是会覆盖默认的finder方法来执行友好查找,而find_by_id则会被覆盖以首先按slug列进行搜索,如果没有找到记录,则id将用于搜索。为什么要使用Company.whereid:1403045688而不是Company.find_by_id 1403045688?因为在版本5.0之前,FriendlyId会重写默认的finder方法来执行友好查找,所以find_by_id会被重写为首先按slug列进行搜索,若并没有找到记录,那个么id将用于搜索。
  Company Load (161.2ms)  SELECT `companies`.* FROM `companies` WHERE `companies`.`slug` = '1403045688' LIMIT 1
  EXPLAIN (162.2ms)  EXPLAIN SELECT `companies`.* FROM `companies` WHERE `companies`.`slug` = '1403045688' LIMIT 1
EXPLAIN for: SELECT  `companies`.* FROM `companies`  WHERE `companies`.`slug` = '1403045688' LIMIT 1
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
| id | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                                               |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
|  1 | SIMPLE      | NULL  | NULL | NULL          | NULL | NULL    | NULL | NULL | Impossible WHERE noticed after reading const tables |
+----+-------------+-------+------+---------------+------+---------+------+------+-----------------------------------------------------+
1 row in set (0.20 sec)

  Company Load (1.6ms)  SELECT `companies`.* FROM `companies` WHERE `companies`.`id` = '1403045688' LIMIT 1
  EXPLAIN (80.7ms)  EXPLAIN SELECT `companies`.* FROM `companies` WHERE `companies`.`id` = '1403045688' LIMIT 1
EXPLAIN for: SELECT  `companies`.* FROM `companies`  WHERE `companies`.`id` = '1403045688' LIMIT 1
+----+-------------+-----------+-------+---------------+---------+---------+-------+------+-------+
| id | select_type | table     | type  | possible_keys | key     | key_len | ref   | rows | Extra |
+----+-------------+-----------+-------+---------------+---------+---------+-------+------+-------+
|  1 | SIMPLE      | companies | const | PRIMARY       | PRIMARY | 182     | const |    1 |       |
+----+-------------+-----------+-------+---------------+---------+---------+-------+------+-------+
1 row in set (0.08 sec)

=> #<Company id: "1403045688", name: "AAA Electric", slug: "aaa-electric-inc", created_at: "2014-06-17 22:54:48", updated_at: "2016-03-12 05:13:26">