自引用habtm在标准Rails工具箱之外有一点。您需要调整finder\u sql或有2个关系:
has_and_belongs_to_many :related_documents, join_table: :related_documents,
class_name: "Document",
foreign_key: :referent_id,
association_foreign_key: :reference_id
has_and_belongs_to_many :referenced_documents, join_table: :related_documents,
class_name: "Document",
foreign_key: :reference_id,
association_foreign_key: :referent_id
如果需要将结果合并到一个SQL中,则需要调整Finder SQL,请参见例如。
https://gist.github.com/srpouyet/4121517
has_and_belongs_to_many :related_documents,
class_name: 'Document',
join_table: :related_documents,
foreign_key: :reference_id,
association_foreign_key: :referent_id,
uniq: true,
finder_sql: proc {
%(SELECT DISTINCT "documents".* FROM "documents"
INNER JOIN "related_documents"
ON "documents"."id" = "related_documents"."referent_id"
WHERE "related_documents"."reference_id" =
UNION
SELECT DISTINCT "documents".* FROM "documents"
INNER JOIN "related_documents"
ON "documents"."id" = "related_documents"."reference_id"
WHERE "related_documents"."referent_id" =
)}