Предложение ActiveRecord «where» для has_many через отношение

#ruby-on-rails #activerecord

#ruby-on-rails #activerecord

Вопрос:

У меня есть две модели в отношениях «многие ко многим».

Capability Модель:

 class Capability < ApplicationRecordend
  

И Teammate :

 class Teammate < ApplicationRecord
  has_many :teammate_capabilities
  has_many :capabilities, through: :teammate_capabilities
end
  

Модель объединения:

 class TeammateCapability < ApplicationRecord
  belongs_to :teammate
  belongs_to :capability
end
  

Теперь я хочу найти всех товарищей по команде, у которых есть хотя бы одна из группы возможностей. Я пытался:

 capabilities = Capability.where(id: [197, 198]) # works
teammates = Teammate.where(capabilities: capabilities) # blows up
  

Вторая строка приводит к:

 => PG::UndefinedColumn: ERROR:  column "capability_id" does not exist
LINE 1: ...ROM "teammates" WHERE "teammates"."id" IN (SELECT capability...
  

Что я сделал не так? Какой правильный синтаксис для моего запроса? Я хотел бы получить коллекцию всех товарищей по команде, обладающих, по крайней мере, возможностями 197 или возможностями 198.

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

1. Вы рассматривали возможность использования joins для указания условий в объединенной таблице ?

Ответ №1:

Teammate.joins(:capabilites).where(capabilities: {id: capabilities})

Вам нужно присоединиться к таблице, а затем просмотреть отношение в предложении where. Это должно сработать.