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 应该照常工作。
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 应该照常工作。