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或.find_by_sql等方法手工编写SQL查询。但这似乎并不“正确”。为什么?手写的SQL查询很难维护并且依赖于数据库。 “最后的手段”是文档所称的这些方法。 (http://apidock.com/rails/ActiveRecord/Base/find_by_sql/class)
问题:如何使用uniq_alphanum_identifier建立模型关联(这是否可能?)这样我可以利用我的模型关联并(希望)利用Rails的查询方法来消除手写的查询?
答案 0 :(得分:2)
您可以像这样指定外键:
在 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应该像往常一样工作。