Несмотря на то, что вы можете получить доступ к вариантам с рынка, если вы установили отношения с ними, у вас их много, но, на мой взгляд, лучше сохранить market_id в таблице вариантов и установить индекс на основе двух столбцов
class Market < ApplicationRecord
has_many :products
has_many :variants , :through => :products
end
class Product < ApplicationRecord
belongs_to :market
has_many :variants
end
class Variant < ApplicationRecord
belongs_to :Product
end
Вы можете создатьмиграция для добавления market_id в таблицу вариантов с двумя столбцами на основе индекса вот ссылка и вот код для создания двух столбцов на основе индекса n (market_id и sku)
add_index(:variants, [:market_id, :sku], unique: true)