Получение записи, которая объединила 2 таблицы - PullRequest
2 голосов
/ 23 декабря 2011

Хорошо, у меня есть простое has_many: сквозные отношения в Rails 3.1

class Event < ActiveRecord::Base
  has_many :invites

  [...]
end

class Account < ActiveRecord::Base
  has_many :invites
  has_many :events, :through => :invites

  [...]
end

class Invite < ActiveRecord::Base
  belongs_to :account
  belongs_to :event

  [...]
end

Для получения всех пользовательских событий я делаю

@events = current_account.events

Как я могу получить запись, которая соединила две таблицы (т. Е. Строку приглашения) без выполнения запроса для каждого события? Или хотя бы один столбец из записи приглашения, на который мне нужно сослаться?

Использование: include =>: invites включает ВСЕ приглашения для каждого события. Мне просто нужен тот, на котором было сделано соединение. Я искал Google и не мог ничего найти. Я чувствую, что это должно быть довольно простым делом. Чего мне не хватает?

1 Ответ

2 голосов
/ 23 декабря 2011

Просто приведите их с другой стороны:

Event
  .includes ( :invites => :account )
  .where    ( :invites => {:accounts => {:id => current_account.id }} )

Будьте внимательны, в предложении where символы должны быть множественным числом (имена таблиц), тогда как в предложении includes символы относятся к ассоциациям (множественное число, если has_many, единственное число, если belongs_to). Кстати, ваша Invites модель должна быть единственной (Invite) в соответствии с соглашениями о рельсах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...