Это зависит от того, что такое ProductType. Если это категоризация, то может иметь смысл иметь такую ассоциацию has_many: product_types. Если то, что вы действительно хотите, это разные типы продуктов, то я бы использовал STI, чтобы сделать вашу жизнь немного проще. Кроме того, я бы упростил product_item до простого элемента, если у вас нет веских причин для этого.
http://juixe.com/techknow/index.php/2006/06/03/rails-single-table-inheritance/
STI Way
Добавьте миграцию в таблицу «Продукты», чтобы добавить столбец типа:
add_column :products, :type, :string
Затем измените ваши модели следующим образом:
product.rb
class Product < ActiveRecord::Base
has_one :item
end
type_1.rb
class Type1 < Product
end
type_2.rb
class Type2 < Product
end
и т.д.
Для ваших подтипов я бы сделал то же самое (например, type1):
subtype_1.rb
class Subtype1 < Type1
end
Так что теперь у всех ваших различных типов и подтипов есть элемент, связанный с ними. Теперь ваш предмет просто связан с продуктом, и все готово.
item.rb
class Item < ActiveRecord::Base
belongs_to :product
end
Если это не то, что вы хотите, тогда я буду рад изменить мой ответ, если вы предоставите больше ясности.