#ruby-on-rails #activerecord
#ruby-on-rails #activerecord
Вопрос:
У меня есть две модели в отношениях «многие ко многим».
Capability
Модель:
class Capability < ApplicationRecord
…
end
И 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. Это должно сработать.