Rails реляционная проблема - Найти следующий выход пользователя - PullRequest
0 голосов
/ 04 августа 2010

У меня есть таблица экскурсий, которая в основном содержит некоторую информацию об экскурсии.У этих прогулок есть экипажи, у которых есть пользователи (через crew_users)

Так же, как примечание, у экскурсий много команд, поэтому в таблице экипажей есть outing_id

Теперь мне нужно найти следующий выход пользователя, как и в первом, где outing.start_time > Time.now

У меня есть это в моей модели user.rb:

has_many :crew_users
has_many :crews, :through => :crew_users
has_many :outings, :through => :crews

И когда я пытаюсьсделать это:

>> Users.find(1).outings

Я получаю эту ошибку:

ActiveRecord::StatementInvalid: Mysql::Error: Unknown column 'crews.user_id' 
in 'where clause': SELECT `outings`.* FROM `outings`  INNER JOIN `crews` ON
`outings`.id = `crews`.outing_id    WHERE ((`crews`.user_id = 1))

У кого-нибудь есть идеи?Как я уже сказал, моя цель состоит в том, чтобы вывести пользователя next из текущего времени, так что, возможно, гораздо лучше сделать это!

1 Ответ

1 голос
/ 04 августа 2010

Вы можете попытаться изменить это, если двойное значение :through исключено, отфильтровав записи Outing. SQL для этого будет выглядеть примерно так:

SELECT outings.id FROM outings
  LEFT JOIN crews ON crews.id=outings.crew_id
  LEFT JOIN crews_users ON crews_users.crew_id=crews.id
  WHERE crews_users.user_id=? AND start_time>=NOW()
  ORDER BY created_at
  LIMIT 1

Быстрый и грязный подход - запустить его и извлечь нужное значение outing_id, а затем вызвать Outing.find с этим.

...