如何使用 "id" 作为 table 的主键来覆盖 Rails'?

How to override Rails' using "id" as a table's primary key?

Rails 5.2.1

我有一个 Postfix 邮件服务器,是根据 flurdy.com 上的指南设置的。它在后端使用 MySQL 来跟踪虚拟域、用户并将别名映射到用户帐户。我正在尝试在它使用的 MySQL table 上放置一个漂亮的 Rails 前端。

Flurdy's method 使用名为“id”的字段来存储用户的电子邮件地址。当然,我的问题是 Rails 喜欢使用“id”作为 table 的主键。我找到了使用不同主键的指南,但即使在我的用户 table 上执行 db:migrate 并在模型中指定它应该使用 'pkid' 作为主键,而不是给出我的电子邮件地址列表,我得到 pkid 的值。 MySQL.

中的电子邮件地址是正确的

这是用户 table 迁移的相关片段:

class CreateUsers < ActiveRecord::Migration[5.2]
  def change
    create_table :users, id: false do |t|
      t.primary_key :pkid
      t.string :id
      t.string :name

 . . . skip . . . 

      t.timestamps
    end
  end
end

这是用户模型:

class User < ApplicationRecord
  self.primary_key = 'pkid'
end

预期的行为是在我调用用户时看到类似这样的内容#index:

pkid  id                    name
1     this@example.com      This User
2     that@example.com      That User
3     theother@example.com  Someone Else

而我看到的是:

pkid  id                    name
1     1                     This User
2     2                     That User
3     3                     Someone Else

感谢您的帮助。

编辑:我在 Flurdy 的指南上方设置了 link 以设置 Postfix 以在 GNU/Linux 上为虚拟域提供服务。它使用 MySQL 来存储用户、域和别名信息,有时会替换 /etc/postfix 目录中的散列 tables,为这个问题添加一些上下文。

我假设 id 属性现在是 pkid 属性的别名。

要查看 id 列的值,您可以使用属性散列:

    User.first.attributes["id"]