Вот пример структуры, которую я пытаюсь достичь.Я просто приведу глупый пример, чтобы его было проще объяснить:
Допустим, у нас есть Продукт, который содержит кучу разных молотков.Каждый молот имеет несколько атрибутов (вес, размер, цвет и т. Д.), Но все они могут забивать гвозди. Так что в этом отношении они взаимозаменяемы.Однако они не взаимозаменяемы с другими продуктами, такими как бензопила или кувалда.
Поэтому я хочу иметь возможность вести список всех продуктов, которые являются взаимозаменяемыми.Поэтому, если один молоток недоступен, я мог бы увидеть все остальные продукты, которые я могу дать клиенту.
Поскольку я не знаю, сколько взаимозаменяемых продуктов может иметь каждый продукт (скажем, есть 5 различных молотков и 50 отверток), я не могу просто создать сменное поле для хранения этой информации.я думал о перечислениях, но они более сложны для составления отчетов.
Вот то, что у меня есть, но я не уверен, что это лучшее решение (это немного поздно, и мой разумначинает таять - это гораздо упрощенный пример, если мои таблицы самообращения):
class Product < ActiveRecord::Base
has_many :interchangable_products, :dependent => :destroy
end
class InterchangableProduct < ActiveRecord::Base
belongs_to :product, :class => "Product", :foreign_key => :product_id
belongs_to :interchangable_with, :class_name => "InterchangableProduct", :foreign_key => :interchangable_with_id
has_many :interchangables, :class_name => "InterchangableProduct", :inverse_of => :interchangable_with, :foreign_key => :interchangable_with_id
validates :product_id, :presence => true, :uniqueness => [:scope => :interchangable_with_id]
end
Спасибо