[英]Rails has_many through – how to specify key columns for join table?
我想对连接表的两列使用url_id 。 Rails坚持使用documents表中的主键。
我有带有url_id属性的自引用Document类。 一个文档可以引用其他文档。 我想要以url_id作为连接值的联接表,如下所示:
所需状态:
Documents: Document relationships: ID | URL_ID | REFERRING_ID | REFERENCED_ID | ---|--------| -------------|---------------| 1 | 1234 | 1234 | 1266 | 2 | 1266 | 1234 | 2345 | 3 | 2345 | 1266 | 426 | 4 | 426 | 444 | 750 | 5 | 750 | 7 | 444 |
但是我不能说服Rails使用url_id作为referring_id密钥。
有了这样的模式,我可以使用下面的SQL代码片段来获取相关文档。
SELECT "documents".* FROM "documents"
INNER JOIN "document_relationships"
ON "documents"."url_id" = "document_relationships"."referenced_id"
WHERE "document_relationships"."referring_id" = ?
经过ActiveRecord文档之后,我能得到的最接近的是:
实际状态:
REFERRING_ID | REFERENCED_ID | -------------|---------------| 1 | 1266 | 1 | 2345 | 2 | 426 | 7 | 750 |
Nb。 Rails的使用,而不是DOCUMENT_ID的url_id为referring_id列。
文件类别:
class Document < ApplicationRecord has_many :document_relationships, foreign_key: :referring_id has_many :related, through: :document_relationships, source: :referenced end class DocumentRelationship < ApplicationRecord belongs_to :referring, class_name: "Document" belongs_to :referenced, class_name: "Document", primary_key: :url_id end
您必须在document_relationships的两端都设置primary_key- 引用关联:
class Document < ApplicationRecord
has_many :document_relationships, foreign_key: :referring_id, primary_key: :url_id
has_many :related, through: :document_relationships, source: :referenced
end
class DocumentRelationship < ApplicationRecord
belongs_to :referring, class_name: "Document", primary_key: :url_id
belongs_to :referenced, class_name: "Document", primary_key: :url_id
end
# In case the url_id is not unique do not forget to use sth like Array's #uniq :
# Document.first.related.to_a.uniq(&:url_id)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.