2014-11-17 4 views
3

Этой проблема кажется простой, но почему-то я не могу обернуть мою голову вокруг него, используя ActiveRecord запросов:Rails 4 ActiveRecord длина has_many состояния

у меня есть 2 классов с одного до многих отношений

class Student 

    belongs_to :school 

end 

class School 

    has_many :students, inverse_of: :school 

end 

I хотите создать область, которая будет отображать все школы, в которых учащиеся (другими словами, размер их ученической коллекции больше 0).

Я знаю, как написать это в SQL, но ActiveRecord заставил меня столкнуться. мне удалось добиться такого поведения с этой линией:

School.joins(:students) 

, но я все еще хочу знать, где я могу указать условие, что-то вроде:

School.where("students.length > ?", 0) 

ответ

1

Не является прямым ответом на ваш реальный вопрос , а альтернатива, но вы получите большой прирост производительности по ассоциации подсчитывает, используя функцию «counter_cache» в рельсах:

class Student 
    belongs_to :school, :counter_cache => true 

вы также должны добавить «students_c ount "в таблице школ с по умолчанию 0. Затем, когда ассоциация создается/удаляется, этот счетчик автоматически обновляется и позволяет простые запросы, например:

School.where('students_count > ?, 0) 
Смежные вопросы