#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
строку, указывающую левое соединение, или использовать anArel::Nodes::OuterJoin
; однако вам также нужно будет изменить предложение where, чтобыuser_id
NULL
в противном случае результатом все равно было внутреннее соединение.2. А! Эта
user_id
нулевая проверка была тем, что сбило меня с толку! Спасибо!