使用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
的列中检索值?
答案 0 :(得分:0)
要完成此操作,您必须覆盖与id
相关的 ActiveRecord 的 PrimaryKey 模块中的所有这些公共方法。 See this
因此,请不要浪费您的时间并编写迁移内容,并将所有id_number
数据转移到id
&amp;反之亦然。
PS:使用id
作为主键是Rails的最佳实践!
由于