2014-02-05 6 views
0

У меня есть 2 модели: проект и расписание. Проект has_one График и график принадлежит проекту. После создания проекта один из сотрудников, участвующих в проекте, в конечном итоге создаст расписание. Я пытаюсь создать страницу, которая показывает работодателю все его/ее проекты, у которых есть расписание. В контроллере графики, я попытался следующий код:рельсы - не удается получить доступ к модели, принадлежащей другой модели

def show_incomplete_schedules_to_employers 
    @schedules = Schedule.where("project.employer_id = ?", current_user.id).all 
    @projects = @schedules.collect{|schedule| schedule.project} 
end 

но возвращает ошибку:

ActiveRecord::StatementInvalid (PG::UndefinedTable: ERROR: missing FROM-clause entry for table "project" 
LINE 1: SELECT "schedules".* FROM "schedules" WHERE (project.employ... 
               ^
: SELECT "schedules".* FROM "schedules" WHERE (project.employer_id = 32)): 
    app/controllers/schedules_controller.rb:174:in `show_incomplete_schedules_to_employers' 

Как я могу получить доступ графики работодателей?

+0

ошибка говорит, что не существует таблица с именем 'project', который вызывается для вашей' Расписание .where ("project.employer_id =?", current_user.id) .all' ... Что такое «проект» в заявлении, которое должно быть ссылкой? –

+0

Все графики принадлежат проекту. – Philip7899

+0

Правильно, но не так ли, что делает ваш второй оператор '@projects = ...'? –

ответ

0

Вы должны добавить к вашей модели Работодатель:

has_many :schedules, through: :projects 

А затем получить доступ к нему:

current_user.employer.schedules 

Что вам нужно как @projects и @schedules для?

+0

Я не думаю, что это сработало бы, потому что тогда проект должен был иметь столбец sched_id, что не имело бы смысла. У меня есть «@schedules» и «@projects», потому что мне нужно получить доступ к проектам, содержащим графики. – Philip7899

+0

О, я должен упомянуть, что «работодатель» - это тип пользователя, поэтому current_user = работодатель (по крайней мере здесь) – Philip7899

+0

AH, то просто используйте current_user.schedules - 'has_many: through' не заботится о том, где находится foreign_key, это будет работайте до тех пор, пока не определена связь, имя которой передается 'through'. – BroiSatse

0

Из того, что я предполагаю, что вы пытаетесь сделать, я хотел бы обратиться к проблеме с помощью соединений. Что-то вроде этого:

def show_incomplete_schedules_to_employers 
    @schedules = Schedule.joins(:projects).where("projects.employer_id = ?", current_user.id) 
    @projects = @schedules.collect{ |schedule| schedule.project } 
end 
  • примечание множественная форма projects в предложении where
Смежные вопросы