Получение связанных объектов считается с условием в Rails - PullRequest
0 голосов
/ 07 января 2020

У меня есть следующие модели Merchant, Offer и GiftCards. Я хочу получить все связанные предложения и подарочные карты с определенными условиями.

Связь между ними:

merchant.rb

has_many :offers
has_many :gift_cards

gift_card.rb:

belongs_to :merchant

offer. , Я хочу получить количество подходящих_предложений / elift_gift_cards продавца.

Я могу сделать что-то похожее на следующий код, чтобы получить счетчик.

merchant.offer_ids & eligible_offer_ids

Но есть ли способ изменить запрос, чтобы получить elitable_offers вместо всех предложений в продавце.

Нечто похожее на запрос ниже.

    Merchant.pluck(
    :id, Arel.sql('COUNT(eligible_offer_ids.id)'), Arel.sql('MAX(eligible_offer_ids.id)'),
     Arel.sql('COUNT(eligible_gift_card_ids.id)'), 
     Arel.sql('MAX(gift_eligible_gift_card_id.id)')
 )

1 Ответ

0 голосов
/ 07 января 2020
Merchant.joins(:offers, :gift_cards)
  .select('merchants.id, COUNT(gift_cards) as offer_count, 
           COUNT(gift_cards) as gift_card_count')
  .where(offers: { id: eligible_offer_ids }, 
         gift_cards: { id: eligible_gift_cards_ids })
  .group(:id)

Это вернет ActiveRecord_Relation идентификаторов продавца, offer_counts и gift_card_counts, где в этих массивах находятся подходящие предложения и идентификаторы подарочных карт. Затем вы можете перебрать все, что вам нужно: D

...