Добавить собственную связь один-ко-многим, используя другие поля, кроме 'id'

У меня есть модель ProductЯ хочу реализовать самоассоциацию на этих двух полях channel_advisor_product_id, parent_product_id, Но когда я звоню Product.last.child_products это занимает id вместо parent_product_id

belongs_to :parent_product, class_name: 'Product', primary_key: "channel_advisor_product_id"

has_many :child_products, class_name: 'Product', foreign_key: "parent_product_id"

2 ответа

Решение

В основном проблема решается путем добавления primary_key а также foreign_key на обеих ассоциациях parent а также children, Теперь идентификатор исключен и self association работает нормально для моих предоставленных столбцов.

own_to: parent, name_name: 'Product', primary_key: "channel_advisor_product_id", foreign_key: "parent_product_id"
has_many: children, class_name: 'Product', foreign_key: "parent_product_id", primary_key: "channel_advisor_product_id"

Вы используете консоль рельсов?

Если "yes", введите exit и "rails c" снова, то в консоли:

Product.last.child_products

и вы увидите, использует ли запрос "id" или "parent_product_id".

Другие вопросы по тегам