ActiveRecord: Как запросить все 'children_model' из 'parent_model', где 'parent_model.something = X? - PullRequest
0 голосов
/ 07 июня 2019

Сообщество has_many сообщений

Сообщения принадлежат сообществу

Community.featured - логическое значение

Я хочу получить все сообщений , где Community.featured = true

Я пробовал это, но не могу заставить запрос работать: Community.joins (: пост) .гд ( 'community.featured = истина')

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Кажется, опечатка, попробуйте это -

Post.joins(:community).where("communities.featured= ?", true)

Или

Post.joins(:community).where(communities: {featured: true})

Примечание. Всегда используйте table_name в форме plural в запросе, т.е. (communities.featured вместо community.featured)

0 голосов
/ 07 июня 2019

Я бы порекомендовал использовать «include» от имени «joins», потому что если мы пройдем документирование Rails, оно ясно говорит: «С include, Active Record гарантирует, что все указанные ассоциации загружаются с использованием минимально возможного количества запросов». , Когда нам нужны данные из связанных таблиц, необходимо использовать include.

Post.includes(:community).where(communities: {featured: true})

Или

Вы можете написать область действия в модели сообщества

scope :show_featured_communities, -> {
  where(features: true)
}

И назовите это как

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