поиск записей на основе результатов из других результатов - PullRequest
0 голосов
/ 10 января 2019

У меня есть четыре вида записей. Команды. Тренеры. Игроки. и семьи.

Команды имеют один ко многим ассоциацию с тренерами. Тренеры имеют непосредственную связь с игроками. Игроки имеют много к одному ассоциации с семьями.

Мне нужно найти конкретные семьи, связанные с определенными командами. Однако из-за их разделения я не могу просто пойти Team.last.family.

Есть ли способ перепрыгнуть через игроков и тренеров и сделать запрос из клиники прямо к семье?

1 Ответ

0 голосов
/ 13 января 2019

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

Family.joins(some_join_object).where(some_sql_search_string)

Если у вас есть таблица соединения, включающая все нужные вам столбцы, укажите условия, по которым вы хотите выполнить фильтрацию.

Family.joins(:players, :coaches, :teams).where("families.name='Wesley' and teams.name='Crushers'")

Вот пример из предоставленной ссылки.

class Category < ApplicationRecord
  has_many :articles
end

class Article < ApplicationRecord
  belongs_to :category
  has_many :comments
  has_many :tags
end

class Comment < ApplicationRecord
  belongs_to :article
  has_one :guest
end

class Guest < ApplicationRecord
  belongs_to :comment
end

class Tag < ApplicationRecord
  belongs_to :article
end

12.1.3.2 Присоединение к вложенным ассоциациям (многоуровневое)

Category.joins(articles: [{ comments: :guest }, :tags])

Это производит:

ВЫБРАТЬ категории. * ИЗ категорий ВНУТРЕННИЕ СОЕДИНЕНИЯ статьи НА Articles.category_id = Categories.id ВНУТРЕННЕЕ СОЕДИНЕНИЕ комментарии comments.article_id = Articles.id ВНУТРЕННИ guest.comment_id = comments.id ВНУТРЕННИЕ ПРИЛОЖЕНИЯ articles.id

Или по-английски: «вернуть все категории, в которых есть статьи, где те статьи имеют комментарий, сделанный гостем, и где эти статьи также есть тег. "

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