Rails-макрос find_by с отношением has_many - PullRequest
0 голосов
/ 16 июля 2010

У меня проблемы с динамическими искателями на основе атрибутов в рельсах. Похоже, они не подходят для моей модели.

class Person < ActiveRecord::Base
  belongs_to :team
end

class Team < ActiveRecord::Base
  has_many :people
end

Так что в скрипте / консоли, чтобы найти команды, имеющие человека с ID 1, я должен быть в состоянии сделать:

>> Team.find_by_person_id(1)

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

NoMethodError: undefined method `find_by_person_id'

Это действительно странно, потому что поиск в обратном направлении, то есть:

>>Person.find_all_by_team_id(1)

Успешно найдет всех людей в команде 1.

Что нужно сделать, чтобы найти команду по person_id?

Ответы [ 2 ]

1 голос
/ 16 июля 2010

Если вы хотите найти конкретного человека среди людей, принадлежащих к определенной команде, вы должны указать:

@some_team.people.find_by_id(1)

Person.find_all_by_team_id работает, потому что team_id - это столбец в таблице People.

Team.find_by_person_id (1) не работает, потому что:

1) Команда - это класс, а не экземпляр этого класса, что означает, что в нем нет метода people, и поэтому выполучить no_method_error и

2) Даже если правильно получить часть экземпляра (т.е. @ some_team.people.find_by_person_id), у Person нет столбца person_id, но вместо него есть столбец id.Вот почему я упомянул @ some_team.people.find_by_id выше.

0 голосов
/ 16 июля 2010

То, что вы пытаетесь сделать, - это набрать команду, когда вы знаете этого человека.

person = Person.find(1)
team = person.team

# or in one line
team = Person.find(1).team
...