Как возвращать записи, если в соединении нет связей

#ruby-on-rails #activerecord

#рубин на рельсах #активная запись

Вопрос:

У меня есть Records то, что может быть zero_to_many RecordLabels . Мне нужно получить записи, на которых нет меток, созданных конкретным пользователем, и их меньше, чем required_label_count в целом.

Приведенный ниже запрос работает только в том случае, если есть хотя бы один RecordLabel .

Как я могу получить a Record , если у него его нет RecordLabels или когда он есть, он должен удовлетворять условиям?

 Record.for_company(company_id)  .joins(:record_labels)  .group('records.id')  .having('count(record_labels.id) lt;= ?', required_label_count)  .where('record_labels.user_id != ?', user_id)  

Комментарии:

1. В зависимости от вашей версии rails вы можете использовать left_joins(:record_labels) вместо joins . В более старых версиях вам пришлось бы использовать joins строку, указывающую левое соединение, или использовать an Arel::Nodes::OuterJoin ; однако вам также нужно будет изменить предложение where, чтобы user_id NULL в противном случае результатом все равно было внутреннее соединение.

2. А! Эта user_id нулевая проверка была тем, что сбило меня с толку! Спасибо!