Rails:如何从名为`id`的列中检索值?

时间:2017-01-25 08:22:21

标签: mysql ruby-on-rails ruby-on-rails-4

使用Rails 4.2.6。我有一张这样的桌子(请原谅奇怪的桌子和田野游戏 - 他们来自古老的非Rails项目):

mysql> desc user;
+-----------------+---------------------+------+-----+-----------+----------------+
| Field           | Type                | Null | Key | Default   | Extra          |
+-----------------+---------------------+------+-----+-----------+----------------+
| ...             | ...                 | ...  | ... | ...       | ...            |
| id_number       | int(10) unsigned    | NO   | PRI | NULL      | auto_increment |
| id              | varchar(128)        | NO   | UNI | NULL      |                |
| ...             | ...                 | ...  | ... | ...       | ...            |
+-----------------+---------------------+------+-----+-----------+----------------+
16 rows in set (0.00 sec)

id字段包含标识用户的字符串,例如"alea12"。 我这个表的模型如下:

class User < ActiveRecord::Base
  self.table_name = 'user'
  self.primary_key = 'id_number'
end

当我尝试使用User.id检索ActiveRecord时,我不会允许我这样做。 在MySQL中:

mysql> select id_number, id from user where id = "alea12" \G
*************************** 1. row ***************************
id_number: 15966
       id: alea12
1 row in set (0.00 sec)

rails c

[1] pry(main)> User.where(id: "alea12")
  User Load (0.9ms)  SELECT `user`.* FROM `user` WHERE `user`.`id` = 'alea12'
  User Load (0.9ms)  SELECT `user`.* FROM `user` WHERE `user`.`id` = 'alea12'
=> [#<User:0x007f79c4bfe8a8
  id_number: 15966,
  id: 15966,
  ...,
  updated_date: nil>]

我希望id字段为“alea12”,但它返回与id_number相同的整数。 是否有任何选项可以像这样从名为id的列中检索值?

1 个答案:

答案 0 :(得分:0)

要完成此操作,您必须覆盖与id相关的 ActiveRecord PrimaryKey 模块中的所有这些公共方法。 See this

因此,请不要浪费您的时间并编写迁移内容,并将所有id_number数据转移到id&amp;反之亦然。

PS:使用id作为主键是Rails的最佳实践!

由于