Rails 4:使用唯一的字母数字标识符(不是主键)连接表

Rails 4: Using unique alphanumeric identifier (not primary key) to join tables

Rails 4、Active Record、Nitrous.io、Heroku、PostgreSQL.

我正在编码的 Rails 应用程序中的 most_important_table 包含记录,每个记录都有一个唯一标识符(示例:“912828J27”,"US38141EC238"),称它为 uniq_alphanum_identifier.我的应用程序 (LEFT OUTER) 在 most_important_table.uniq_alphanum_identifier 上加入了其他几个表的数据。

由于我没有使用我的记录的主键来加入,我觉得我没有利用我的模型关联并且发现自己使用 .connection.select_all 或等方法手动编写 SQL 查询.find_by_sql。但这好像不是"right." 为什么? SQL 手写的查询很难维护并且依赖于数据库。 "Last resort" 是文档对这些方法的称呼。 (http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class)

问题:如何使用 uniq_alphanum_identifier 设置模型关联(这甚至可能吗?)以便我可以利用我的模型关联并(希望)利用 Rails' 查询方法来消除手写查询?

您可以像这样指定外键:

belongs_to

belongs_to :parent, foreign_key: 'parent_alphanum_id', primary_key: 'uniq_alphanum_identifier'

has_many

has_many :children, foreign_key: 'parent_alphanum_id', primary_key: 'uniq_alphanum_identifier'

然后 Rails 应该照常工作。