Подтвердить что ты не робот

Как мне установить своего рода ассоциацию "принадлежат к: через" без прямого отношения к принадлежащему?

Я знаю, что "assign_to: through" недействительно. Это просто моя попытка выразить то, чего я хочу достичь. Просто потерпи меня на секунду...

Вот что у меня есть:

class League
  has_many :divisions
end

class Division
  belongs_to :league
  has_many :teams
end

class Team
  belongs_to :division
  has_many :players
end

class Player
  belongs_to :team
end

Теперь, чтобы сделать форму просмотра "бейсбольной карты", мне нужно:

name
team.name
team.division.name
team.division.league.name

Итак, есть ли способ установить ассоциацию "own_to: through" для прямого доступа к "Division.name" из "Players_controller" без "команды". префикс?? Мне нужно получить доступ ко множеству столбцов от "игрока" до "деления", поэтому я ищу способ получить "прямой" доступ к этим столбцам.

Одним из вариантов является включение столбца "Division_id" в таблицу "игроков", но мне сказали, что это приведет к нарушению реляционной модели данных, поскольку это может привести к несогласованности, если функциональность выбора данных не обрабатывается должным образом (например, игрок A входит в команду A, которая находится в подразделении A, но у игрока A в столбце Division_id установлено значение B).

Можно ли создать "символическую ссылку", например, "деление" теперь относится к "team.division", а "лига" теперь относится к "team.division.league"??

Или единственный верный вариант - использовать полный путь каждый раз?

Надеюсь, кто-то может помочь.

4b9b3361

Ответ 2

Вы можете попробовать

    class Player
      belongs_to :team
      has_one :division, :through => :team
    end

Ответ 3

В модели игрока вы можете определить вспомогательный метод:

def division
  team.division
end

def league
  team.division.league
end

Конечно, это относится только к читабельности вашего кода и не влияет на форму запросов к базе данных. Если ваш оператор генерирует несколько SQL-запросов, но вы хотите только один, ознакомьтесь с опцией .include здесь: Rails Guides - Active Request Query Interface