2015-04-12 3 views
0

Я не совсем уверен, если я даже задать вопрос правильно, но вот в основном то, что у меня есть:Как выбрать записи, не содержащие дочерние записи?

#models/chapter.rb 
class Chapter < ActiveRecord::Base 
    has_many :pages 
end 

и

#models/page.rb 
class Page < ActiveRecord::Base 
    belongs_to :chapter 
end 

Как я могу выбрать все разделы, которые имеют страницы? Например, если есть 20 глав и только 10 из них действительно имеют страницы, есть ли простой способ, которым я могу сделать что-то вроде: Chapter.where(<where pages exist>) (с правильным кодом, конечно)?

+0

Рассмотрим изменение названия вопроса. Похоже, вы просите о противоположном результате. – messanjah

ответ

1

INNER join гарантирует, что вы получите только Главы со Странами.

Chapter.joins(:pages) 

Вы получите дубликаты, если в главе содержится более одной связанной страницы. Чтобы удалить их, используйте uniq или distinct.

Rails 4

Chapter.joins(:page).distinct 

Rails 3

Chapter.joins(:page).uniq 
Смежные вопросы