Rails Проверяет уникальность столбца на основе отношения - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть таблица продуктов, которая принадлежит рынку и имеет много вариантов, у каждого варианта есть столбец SKU, я хочу проверить уникальность sku, но для одного и того же рынка.я пробовал

validates :sku, uniqueness: { scope: :market_id }

но так как у варианта нет столбца market_id, он не работает !!, как я могу решить эту проблему?!

Ответы [ 2 ]

0 голосов
/ 23 декабря 2018

Несмотря на то, что вы можете получить доступ к вариантам с рынка, если вы установили отношения с ними, у вас их много, но, на мой взгляд, лучше сохранить 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)
0 голосов
/ 23 декабря 2018

Вариант принадлежит продукту на определенном рынке, поэтому, чтобы избежать дополнительного объединения (что является дорогостоящей операцией) при извлечении варианта продукта на рынке, и для реализации этой проверки,Схема должна быть спроектирована таким образом, чтобы Variant принадлежал как Market, так и Product.

Если вариант принадлежит одновременно Product и Market, проверка будет выглядеть следующим образом

validates_uniqueness_of :sku, scope: [:market_id, :product_id]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...