Несколько вложенных форм в рельсах 5 - PullRequest
0 голосов
/ 20 октября 2018

Я смотрю на вложенные атрибуты и у меня есть несколько вопросов об отношениях между моделями.

Скажем, у меня есть Шоу , которое имеет_мани Сезоны Показать и Сезон может иметь много Актеров и Персонал .См. Пример таблицы:

enter image description here

Когда создается Шоу , Сезон принимает Шоу ассоциация и оба Актеры и Персонал принимает оба атрибута Показать и Сезон .Это будет тройная вложенная форма?

То есть мои модели будут выглядеть так?

class Show < ApplicationRecord
  has_many :seasons, dependent: :destroy
  has_many :actors, dependent: :destroy
  has_many :staff, dependent: :destroy

  accepts_nested_attributes_for :seasons, allow_destroy: true
  accepts_nested_attributes_for :actors, allow_destroy: true
  accepts_nested_attributes_for :staff, allow_destroy: true
end

class Season < ApplicationRecord
  belongs_to :show
  has_many :actors, dependent: :destroy
  has_many :staffs, dependent: :destroy

  accepts_nested_attributes_for :actors, allow_destroy: true
  accepts_nested_attributes_for :staff, allow_destroy: true
end

class Actor < ApplicationRecord
  belongs_to :show
  belongs_to :season
end

class Staff < ApplicationRecord
  belongs_to :show
  belongs_to :season
end

А мой контроллер шоу будет выглядеть так:

class ShowsController < ApplicationController
  def create
   @show.seasons.build
   @show.seasons.build.actors.build
   @show.seasons.build.staffs.build
  end
end

1 Ответ

0 голосов
/ 20 октября 2018

Правильная схема:

class Show < ApplicationRecord
  has_many :seasons, dependent: :destroy
  has_many :actors, dependent: :destroy
  has_many :staff, dependent: :destroy

  accepts_nested_attributes_for :seasons, allow_destroy: true
  accepts_nested_attributes_for :actors, allow_destroy: true
  accepts_nested_attributes_for :staff, allow_destroy: true
end

class Season < ApplicationRecord
  belongs_to :show
end

class Actor < ApplicationRecord
  belongs_to :show
  belongs_to :season
end

class Staff < ApplicationRecord
  belongs_to :show
  belongs_to :season
end

Правило простое - если таблица objects имеет внешний ключ subject_id, который связывает его с таблицей subjects, тогда модель Object может содержатьbelongs_to :subject ассоциация.

Есть хорошее объяснение о том, какие отношения использовать в вашей модели в зависимости от размещения Foreign_key.

Не по теме:

Я не знаю специфики вашего проекта, но он выглядит немного оскорбительно.Вы создаете новых актеров и сотрудников каждый раз, когда создается новое шоу, как будто они расходуются.Я не хочу казаться циничным, но актеры и персонал могут быть повторно использованы.Если это так, может быть разумно создать has_and_belongs_to_many отношений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...