Не проверено и по памяти, я думаю, вы хотели бы что-то вроде этого:
class ProductLink < ActiveRecord::Base
belongs_to :parent_product, :class_name => 'Product'
belongs_to :child_product, :class_name => 'Product'
end
class Product < ActiveRecord::Base
has_many :parent_links, :class_name => 'ProductLink', :foreign_key => :parent_product_id
has_many :child_links, :class_name => 'ProductLink', :foreign_key => :child_product_id
end
ProductLink (или как вы его называете) сможет содержать одно или несколько дополнительных полей, описывающих взаимосвязь.
Возможно, вы сможете заставить его работать с has_and_belongs_to_many , хотя я предполагаю, что для этого потребуется таблица "products_products", которая может быть немного напряженной.