2016-09-14 3 views
-3
class User < ActiveRecord::Base 
    has_many :portfolios 
end 

class Portfolio < ActiveRecord::Base 
    belongs_to :user 
end 

В каждом портфеле есть булево поле, определяющее, является ли оно полным или пустым.Объем на основе поля ассоциации

Как я могу охватить пользователей на основе количества полных и пустых портфелей, которые у них есть (как отношение активной записи)?

Пример использования выберите (возвращает массив):

User.select { |user| user.portfolios(full: true).count > 1 && 
        user.portfolios(full: false).count == 1 } 
+0

Не могли бы вы рассказать мне причину понижения (чтобы я мог улучшить)? –

+0

Как вы собираетесь решить, полный или пустой портфель? –

+0

любое поле или вы принимаете решение по количеству полей со значением? –

ответ

0

Как я понимаю, вы хотите, чтобы выбрать пользователей с указанным кол-портфелей. т.е. выберите всех пользователей, у которых есть 2 портфеля. Итак, в этом случае вы можете использовать что-то вроде этого:

class User < ActiveRecord::Base 

    ... 

    scope :with_protfolio_count, -> (count) { 
     where(id: Portfolio.having('count(1) = ?', count).group(:user_id).select(:user_id)) 
    } 

    ... 
+0

Да что-то похожее на это, есть ли у вас пример, в котором вы также основываете счет на свойстве портфеля? Скажем, я хочу, чтобы все пользователи имели более одного полного портфолио и только один пустой (добавлен пример с выбором в вопросе). –

+0

Самый простой способ добиться этого - сделать два запроса, а затем объединить их в один массив. –

Смежные вопросы