Rails has_many_through - PullRequest
       8

Rails has_many_through

0 голосов
/ 18 февраля 2019

Я пытаюсь настроить приложение Rails, которое имеет Записи, классифицированные по типу и подтипу;тип будет иметь несколько подтипов, и каждый подтип будет иметь много записей.Удаление типа или подтипа должно завершиться неудачей, если с ним что-то связано.Я бы подумал, что это может сработать, но я обнаружил, что попытка таких вещей, как record.type или type.records.count, ничего не возвращает.Вот настройки:

class Type < ApplicationRecord
    has_many :subtypes, dependent: :restrict_with_exception
    has_many :records, through: :subtypes, dependent: :restrict_with_exception
end

class SubType < ApplicationRecord
   belongs_to :type
   has_many :records, dependent: :restrict_with_exception
end

class Record < ApplicationRecord
   has_one :subtype
   has_one :type, through: :subtype
end

А затем, некоторые миграции, чтобы добавить соответствующие поля к уже существующим классам:

class LinkTypesSubtypesAndRecords < ActiveRecord::Migration[5.2]
    def change
        add_reference :subtypes, :record, index: true
        add_reference :subtypes, :type, index: true
        add_reference :records, :subtype, index: true
        add_reference :types, :subtype, index: true
    end
end

Есть ли что-то, что я здесь упускаю?

1 Ответ

0 голосов
/ 18 февраля 2019

В вашей миграции вы должны добавить ссылку

  1. из subtype в records таблице
  2. из type в subtypes таблице

Таким образом, миграция должна выглядеть следующим образом:

class LinkTypesSubtypesAndRecords < ActiveRecord::Migration[5.2]
    def change
        add_reference :records, :subtype, index: true
        add_reference :subtypes, :type, index: true
    end
end

Для получения дополнительной информации здесь

Обновление 1

Вваши модели:

class Record < ApplicationRecord
  belongs_to :subtype

  delegate :type, :to => :subtype, :allow_nil => true
end
...