在Rails控制台中出现意外的行为
Rails 3.2在Rails控制台中出现意外的行为
我在Rails控制台会话中,并试图通过id找到公司。我有一个公司的表,一个id列。
我做
company = Company.find_by_id("1403045688")
下面是我在控制台得到:
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
和id
当您使用find
方法,如果你想它只是通过ID搜索找到记录,您需要更改代码是这样的:
company = Company.where(id: "1403045688").take
为什么会Company.where (id:“1403045688”)而不是Company.find_by_id(“1403045688”)? – EastsideDeveloper
因为**此前5.0版本,FriendlyId推翻默认finder方法进行友好发现所有的时间**,'find_by_id'是重写通过塞柱首先进行搜索,那么如果记录没有找到,那么ID会被用来搜索。 – Thanh
您似乎使用'friendly_id'宝石,是吗?如果是的话,你需要更新创业板自从V5 –
取景压倒一切被禁止当我用grep在Gemfile.lock的friendly_id,我得到:friendly_id(〜> 4.0,> = 4.0.9) friendly_id(4.0.10.1) friendly_id 你是否建议我使用gem版本5.0? – EastsideDeveloper
是的,如果您不希望primary_key被slug覆盖的默认行为。您总是需要指定您要查询的列。您可能还需要在其他位置更改代码,因为调用slug已发生变化,例如'User.friendly.find(PARAMS [:ID])'看到https://github.com/norman/friendly_id/blob/master/README.md –